支付成功后给指定人员发送微信公众号消息
支付成功后给指定人员(导购)发送微信公众号消息
微信openid已录入数据库表
调用后台接口发送消息接口调用代码如下:
//----add by grj 20231017 start //订单支付成功发送微信公众号消息$.ajax({url:'http://www.menggu100.com:7077/strutsJspAjax/SendWechatMessageAction?orderNo='+state.orderId,type:"POST",data:{},success(data){console.log("请求成功");console.log(data);},error(err){console.log(err);console.log("请求失败");},complete(){console.log("请求完成");}})//----add by grj 20231017 end
整个页面如下
fa-uniapp-3.0.1\pages\pay\result.vue
<!-- 支付结果页面 -->
<template><s-layout title="支付结果" :bgStyle="{ color: '#FFF' }"><view class="pay-result-box ss-flex-col ss-row-center ss-col-center"><view class="pay-waiting ss-m-b-30" v-if="payResult === 'waiting'"> </view><imageclass="pay-img ss-m-b-30"v-if="payResult === 'success'":src="sheep.$url.static('/assets/addons/shopro/uniapp/order/order_pay_success.gif')"></image><imageclass="pay-img ss-m-b-30"v-if="['failed', 'closed'].includes(payResult)":src="sheep.$url.static('/assets/addons/shopro/uniapp/order/order_paty_fail.gif')"></image><view class="tip-text ss-m-b-30" v-if="payResult == 'success'">{{state.orderInfo.pay_mode === 'offline' ? '下单成功' : '支付成功'}}</view><view class="tip-text ss-m-b-30" v-if="payResult == 'failed'">支付失败</view><view class="tip-text ss-m-b-30" v-if="payResult == 'closed'">该订单已关闭</view><view class="tip-text ss-m-b-30" v-if="payResult == 'waiting'">检测支付结果...</view><view class="pay-total-num ss-flex" v-if="payResult === 'success'"><view v-if="Number(state.orderInfo.pay_fee) > 0">¥{{ state.orderInfo.pay_fee }}</view><view v-if="state.orderInfo.score_amount && Number(state.orderInfo.pay_fee) > 0">+</view><view class="price-text ss-flex ss-col-center" v-if="state.orderInfo.score_amount"><image:src="sheep.$url.static('/assets/addons/shopro/uniapp/goods/score1.svg')"class="score-img"></image><view>{{ state.orderInfo.score_amount }}</view></view></view><view class="btn-box ss-flex ss-row-center ss-m-t-50"><button class="back-btn ss-reset-button" @tap="sheep.$router.go('/pages/index/index')">返回首页</button><buttonclass="check-btn ss-reset-button"v-if="payResult === 'failed'"@tap="sheep.$router.redirect('/pages/pay/index', { orderSN: state.orderId })">重新支付</button><buttonclass="check-btn ss-reset-button"v-if="payResult === 'success'"@tap="onOrder">查看订单</button><buttonclass="check-btn ss-reset-button"v-if="payResult === 'success' &&['groupon', 'groupon_ladder'].includes(state.orderInfo.activity_type)"@tap="sheep.$router.redirect('/pages/activity/groupon/order')">我的拼团</button></view><!-- #ifdef MP --><view class="subscribe-box ss-flex ss-m-t-44"><imageclass="subscribe-img":src="sheep.$url.static('/assets/addons/shopro/uniapp/order/cargo.png')"></image><view class="subscribe-title ss-m-r-48 ss-m-l-16">获取实时发货信息与订单状态</view><view class="subscribe-start" @tap="subscribeMessage">立即订阅</view></view><!-- #endif --></view></s-layout>
</template><script setup>import { onLoad, onHide, onShow } from '@dcloudio/uni-app';import { reactive, computed } from 'vue';import { isEmpty } from 'lodash';import sheep from '@/sheep';import $ from 'jquery'const state = reactive({orderId: 0,orderType: 'goods',result: 'unpaid', // 支付状态orderInfo: {}, // 订单详情counter: 0, // 获取结果次数});const payResult = computed(() => {if (state.result === 'unpaid') {return 'waiting';}if (state.result === 'paid') {//----add by grj 20231017 start //订单支付成功发送微信公众号消息$.ajax({url:'http://www.menggu100.com:7077/strutsJspAjax/SendWechatMessageAction?orderNo='+state.orderId,type:"POST",data:{},success(data){console.log("请求成功");console.log(data);},error(err){console.log(err);console.log("请求失败");},complete(){console.log("请求完成");}})//----add by grj 20231017 end return 'success';}if (state.result === 'failed') {return 'failed';}if (state.result === 'closed') {return 'closed';}});async function getOrderInfo(orderId) {let checkPayResult;state.counter++;if (state.orderType === 'recharge') {checkPayResult = sheep.$api.trade.order;} else {checkPayResult = sheep.$api.order.detail;}const { data, code } = await checkPayResult(orderId);if (code === 1) {state.orderInfo = data;if (state.orderInfo.status === 'closed') {state.result = 'closed';return;}if (state.orderInfo.status !== 'unpaid') {state.result = 'paid';// #ifdef MPsubscribeMessage();// #endifreturn;}}if (state.counter < 3 && state.result === 'unpaid') {setTimeout(() => {getOrderInfo(orderId);}, 1500);}// 超过三次检测才判断为支付失败if (state.counter >= 3) {state.result = 'failed';}}function onOrder() {if(state.orderType === 'recharge') {sheep.$router.redirect('/pages/pay/recharge-log');}else {sheep.$router.redirect('/pages/order/list');}}// #ifdef MPfunction subscribeMessage() {let event = ['order_dispatched'];if (['groupon', 'groupon_ladder'].includes(state.orderInfo.activity_type)) {event.push('groupon_finish');event.push('groupon_fail');}sheep.$platform.useProvider('wechat').subscribeMessage(event);}// #endifonLoad(async (options) => {let id = '';// 支付订单号if (options.orderSN) {id = options.orderSN;}if (options.id) {id = options.id;}state.orderId = id;if (options.orderType === 'recharge') {state.orderType = 'recharge';}// 支付结果传值过来是失败,则直接显示失败界面if (options.payState === 'fail') {state.result = 'failed';} else {// 轮询三次检测订单支付结果getOrderInfo(state.orderId);}});onShow(() => {if(isEmpty(state.orderInfo)) return;getOrderInfo(state.orderId);})onHide(() => {state.result = 'unpaid';state.counter = 0;});
</script><style lang="scss" scoped>@keyframes rotation {0% {transform: rotate(0deg);}100% {transform: rotate(360deg);}}.score-img {width: 36rpx;height: 36rpx;margin: 0 4rpx;}.pay-result-box {padding: 60rpx 0;.pay-waiting {margin-top: 20rpx;width: 60rpx;height: 60rpx;border: 10rpx solid rgb(233, 231, 231);border-bottom-color: rgb(204, 204, 204);border-radius: 50%;display: inline-block;// -webkit-animation: rotation 1s linear infinite;animation: rotation 1s linear infinite;}.pay-img {width: 130rpx;height: 130rpx;}.tip-text {font-size: 30rpx;font-weight: bold;color: #333333;}.pay-total-num {font-size: 36rpx;font-weight: 500;color: #333333;font-family: OPPOSANS;}.btn-box {width: 100%;.back-btn {width: 190rpx;height: 70rpx;font-size: 28rpx;border: 2rpx solid #dfdfdf;border-radius: 35rpx;font-weight: 400;color: #595959;}.check-btn {width: 190rpx;height: 70rpx;font-size: 28rpx;border: 2rpx solid #dfdfdf;border-radius: 35rpx;font-weight: 400;color: #595959;margin-left: 32rpx;}}.subscribe-box {.subscribe-img {width: 44rpx;height: 44rpx;}.subscribe-title {font-weight: 500;font-size: 32rpx;line-height: 36rpx;color: #434343;}.subscribe-start {color: var(--ui-BG-Main);font-weight: 700;font-size: 32rpx;line-height: 36rpx;}}}
</style>相关文章:
支付成功后给指定人员发送微信公众号消息
支付成功后给指定人员(导购)发送微信公众号消息 微信openid已录入数据库表 调用后台接口发送消息接口调用代码如下: //----add by grj 20231017 start //订单支付成功发送微信公众号消息$.ajax({url:http://www.menggu100.com:7077/strutsJsp…...
漏洞复现--安恒明御安全网关文件上传
免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…...
简单的对称加密
异或 异或算法的好处便是数A和数B异或后,把结果再和数A异或便可得到B,或者和数B异或可重新得到数据A。利用异或的这个特性可简单实现数据的加密和解密算法。 恺撒密码 恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明…...
vue源码笔记之——响应系统
vue是一种声明式范式编程,使用vue者只需要告诉其想要什么结果,无需关心具体实现(vue内部做了,底层是利用命令式范式) 1. reactive为什么只能操作对象,对于基本数据类型,需要用ref? …...
Android Studio Giraffe | 2022.3.1
Android Gradle 插件和 Android Studio 兼容性 Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件 (AGP) 添加了几项专用于构建 Android 应用的功能。下表列出了各个 Android Studio 版本所需的 AGP 版本。 如果您的项目不受某个特定版本的 Andr…...
Spring Boot 3.0 已经就绪,您准备好了么?
Java 微服务开发框架王者 Spring 2014 年的 4 月,Spring Boot 1.0.0 正式发布。距离 1.0 版本的发布已经过去了 9 年多的时间,如今 Spring Boot 已经被 Java 开发者广泛使用,正如 JRebel 的 2022 年开发者生产力报告中提到的那样,…...
5+非肿瘤分析,分型+WGCNA+机器学习筛选相关基因
今天给同学们分享一篇非肿瘤分型机器学习WGCNA实验的生信文章“Identification of diagnostic markers related to oxidative stress and inflammatory response in diabetic kidney disease by machine learning algorithms: Evidence from human transcriptomic data and mou…...
算法课作业2 OJ for Divide and Conquer
https://vjudge.net/contest/581947 A - Ultra-QuickSort 题意 每次给n个无序的数,互不重复,问最少需要多少次必要的交换操作使n个数有序。 思路 看一眼想到逆序数,然后验证了逆序数的个数符合样例,但想了一个3 2 1的话实际上…...
申请全国400电话的步骤及注意事项
导语:随着企业的发展,越来越多的公司开始意识到全国400电话的重要性。本文将介绍申请全国400电话的步骤及注意事项,帮助企业顺利办理相关手续。 一、了解全国400电话的概念和优势 全国400电话是一种统一的客服热线号码,以“400”…...
C++ 的设计模式之 工厂方法加单例
在下面的示例中,我将演示如何创建一个工厂类,该工厂类能够生成四个不同类型的单例对象,每个单例对象都通过单独的工厂方法进行创建。 #include <iostream> #include <mutex>// Singleton base class class Singleton { protecte…...
Deploy、Service与Ingress
Deployment 自愈 介绍:控制Pod,使Pod拥有多副本,自愈,扩缩容等能力 # 清除所有Pod,比较下面两个命令有何不同效果? kubectl run mynginx --imagenginxkubectl create deployment mytomcat --imagetomcat:8.5.68 # 自…...
定制化推送+精细化运营,Mobpush助力《迷你世界》用户留存率提升23%
随着智能设备的市场下沉,手游市场迎来了爆发式增长,《迷你世界》作为一款于2015年推出的手游,一经问世就饱受欢迎。上线短短三年,迷你世界在应用商店下载量已经高达2亿次,周下载量两千万,稳居第一名&#x…...
深度学习零基础教程
代码运行软件安装: anaconda:一个管理环境的软件–>https://blog.csdn.net/scorn_/article/details/106591160(可选装) pycharm:一个深度学习运行环境–>https://blog.csdn.net/scorn_/article/details/106591160…...
简单测试一下 展锐的 UDX710 性能
最近在接触 联通5G CPE VN007 ,发现使用的是 展锐的Unisoc UDX710 CPU,正好简单的测试一下这颗CPU CPU信息 UDX710 是一颗 双核 ARM Cortex-A55 处理器,主频高达 1.35GHz processor : 0 BogoMIPS : 52.00 Features : fp…...
一百九十、Hive——Hive刷新分区MSCK REPAIR TABLE
一、目的 在用Flume采集Kafka中的数据直接写入Hive的ODS层静态分区表后,需要刷新表,才能导入分区和数据。原因很简单,就是Hive表缺乏分区的元数据 二、实施步骤 (一)问题——在Flume采集Kafka中的数据写入HDFS后&am…...
智慧公厕:探索未来城市环境卫生设施建设新标杆
智慧公厕是当代城市建设的一项重要举措,它集先进技术、人性化设计和智能管理于一体,为人们提供更为舒适、便捷和卫生的厕所环境。现代智慧公厕的功能异常丰富,从厕位监测到多媒体信息交互,从自动化清洁到环境调控,每一…...
高压放大器在无线电能中应用有哪些
高压放大器是一种用于放大电信号的放大器,可以将输入的低电压信号放大到更高的输出电压水平。在无线电通信和其他相关领域中,高压放大器具有广泛的应用。本文将详细介绍高压放大器在无线电能中的应用。 无线电发射:高压放大器在无线电发射中起…...
若依集成MybatisPlus
目录 一、依赖变更 1. MybatisPlus依赖 2. pagehelper依赖修改 二、相关配置 1. yml配置 1.1 注释掉原Mybatis配置 1.2 加入MybatisPlus的配置 1.3 注释掉原MybatisConfig.class 三、其他配置及功能实现 1. 自动补全create_time等信息 2. 实现MP分页 3. 实现Mybati…...
List小练习,实现添加图书,并且有序遍历
SuppressWarnings({"all"})public static void main(String[] args) {List list new LinkedList(); // List list new Vector(); // List list new ArrayList();list.add(new Book1("红楼小梦",35.5,"曹雪芹"));list.add(new B…...
代码随想录二刷 Day42
62.不同路径 简单题目自己就可以写出来,注意下创建二维vector的方法就可以, dp table如下 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m,vector<int>(n,0));for (int i 0; i < n; i ) {dp[…...
实战指南:AI调用成本降71%——利用“推理路由”告别大模型胡乱开销
大多数 AI 应用在刚开始时,都会在代码中硬编码一个模型。对于原型开发来说,这运行得很好,但一旦单个端点需要处理多个复杂的任务类别,这种模式就会分崩崩离析。分类、紧急程度评分、面向客户的草稿以及长篇总结,这些任…...
仿真流程专题——基于Workbench的随机振动工程实践与3σ准则应用
1. 随机振动分析入门:从理论到工程实践 第一次接触随机振动分析时,我和大多数工程师一样感到困惑——这种"不确定"的载荷到底该怎么分析?经过多个项目的实战,我发现用生活中的例子最容易理解:想象你在颠簸的…...
手把手复现:用GCC编译选项关闭栈保护,一步步演示缓冲区溢出攻击(附完整代码)
从零构建缓冲区溢出攻击实验:GCC编译选项与漏洞利用实战指南 缓冲区溢出攻击作为系统安全领域的经典课题,至今仍在各类CTF竞赛和实际渗透测试中频繁出现。对于刚接触底层安全的研究者而言,亲手复现一次完整的溢出攻击过程,远比阅读…...
告别ActiveX!用WebSocket+JavaScript在Chrome/Firefox里直接调用扫描仪(附完整代码)
现代浏览器无插件扫描方案:WebSocket与JavaScript的完美结合 曾几何时,企业办公系统中扫描文档需要依赖特定的浏览器和插件。如今,随着技术演进,我们终于可以摆脱ActiveX和NPAPI的束缚,在Chrome、Firefox等现代浏览器中…...
边缘金融大语言模型的高效部署与实时推理优化
1. 边缘金融大语言模型的技术背景与挑战金融行业每天产生海量非结构化数据,包括客户咨询记录、财报文本、新闻舆情等。传统NLP模型在处理这类数据时面临两个核心痛点:一是无法理解金融专业术语背后的复杂语义(如"可转债"在不同上下…...
Matlab阶跃响应性能指标自动化计算:从原理到工程实践
1. 项目概述:从阶跃响应曲线到量化性能的灵魂拷问在控制系统、信号处理乃至电路设计的日常工作中,我们常常会面对一个看似简单却至关重要的任务:给一个系统施加一个“阶跃”输入,然后观察它的输出如何从静止状态“爬升”到新的稳态…...
高速串行通信信号抖动关键技术【附模型】
✨ 长期致力于串行通信、抖动、抖动分析、时钟恢复、均衡研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)基于有界不相关抖动注入的发送端信号生成模型…...
LeetCode 所有路径题解
LeetCode 所有路径题解 题目描述 给定一个有向无环图,找到所有从源节点到目标节点的路径。 示例: 输入:graph [[1,2],[3],[3],[]]输出:[[0,1,3],[0,2,3]] 解题思路 方法:回溯 思路: 使用回溯算法遍历所有可…...
2026年传统视频vs数字人效率对比:差距让很多老板震惊
2026年传统视频vs数字人效率对比:差距让很多老板震惊 【导语】 传统视频制作要7天,AI数字人只要3-5分钟?效率差距到底有多大?今天用真实数据说话。01 效率差距有多大?先看一组数据 很多人对AI数字人的效率提升没有概念…...
TS9580,TS3440,TS3400,G3000,G1810,G2810,G3810,G4810,TS9020,TS9120报错5B00,P07,E08,1700,5b04废墨垫清零,亲测有用。
下载:点这里下载 备用下载:https://pan.baidu.com/s/1WrPFvdV8sq-qI3_NgO2EvA?pwd0000 常见型号如下: G系列 G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1510、G1520、G1810、G1820、…...
