微信环境 H5 的公众号jsapi支付,支付成功之后,点击支付成功页面的完成,没有回到原来的H5页面

1,106 阅读4分钟

概览:

微信环境 H5 的公众号jsapi支付,支付成功之后,点击支付成功页面的完成,没有回到原来的,原页面被关闭了,解决方案

灵感来源:

公司需要使用公众号,在公众号H5中拉起微信单次支付功能,支付对接好了,竟然出现了点击完成按钮直接把原始页面给关闭掉了。

问题解决历程:

1、先查看了支付代码中是否有关闭的页面的逻辑,下面是公众号拉起jsapi支付的具体代码,看了N遍,代码都是没有问题的。

var payParams = {
						"appId": "wx1559ab2c3112219f", //公众号ID,由商户传入
						"timeStamp": res.data.data.h5_url.timeStamp + "", //时间戳,自1970年以来的秒数
						"nonceStr": res.data.data.h5_url.nonceStr, //随机串
						"package": res.data.data.h5_url.package,
						"signType": res.data.data.h5_url.signType, //微信签名方式:
						"paySign": res.data.data.h5_url.paySign //微信签名
						// "redirectUrl": encodeURIComponent('xxx')
					};
				WeixinJSBridge.invoke('getBrandWCPayRequest', payParams,
					function(res) {
						if (res.err_msg === "get_brand_wcpay_request:ok") {
							// 支付成功,可以添加一些用户反馈
							// uni.showToast({
							// 	title: '购买成功',
							// 	icon: 'none',
							// 	duration: 1500
							// });
							
							wx.showModal({
							    title: '支付结果',
							    content: '购买成功!',
							    showCancel: false,
							    success (res) {
							        if (res.confirm) {
							            // 用户确认后可以进行页面跳转或其他操作
										//更新会员信息
										if (uni.getStorageSync('phone') && uni.getStorageSync('authorization')) {
											queryUserPage();
										}
							        }
							    }
							});
						} else {
							// 支付失败,可以提示用户重新尝试
							uni.showToast({
								title: '支付失败,请重新拉起支付!',
								icon: 'none',
								duration: 2000
							});
							// 可以在这里添加重试支付的逻辑
						}
					}
				);

2、第二次尝试使用回调链接redirectUrl,依然无效

3、多次查询资料和尝试之后,因为是服务商模式对接的微信JSAPI支付,发现微信支付官方关闭了JSAPI支付成功后的跳转指定页面的功能,目的是为了推广点金计划。点金计划是一个广告推广系统,服务商可以在其管理平台为特约商户开通或关闭点金计划,并配置同业过滤标签和广告内容‌。文档:产品介绍_点金计划|微信支付合作伙伴文档中心

解决方案:

知道了问题点,那就好解决了,直接让服务商给打开点金计划,然后配置上自己订单页面。订单页面参考下面代码:(使用的uniapp搞得项目)

<template>
	<view class="content">
		<view class="text-area">
			<text class="title">购买成功</text>
		</view>
		<view @click="btnBack()" class="btn-class">返回</view>
	</view>
</template>
 
<script>
	export default {
		components: {},
		data() {
			return {
				loading: true,
				detail: {},
				list: {},
				codee: ''
			};
		},
		async onLoad() {
			const urlone = window.location.href;
			const pages = getCurrentPages();
			const currentPage = pages[pages.length - 1]; //当前页面的全部信息
			const route = currentPage.route; //当前路由的路径 pages/login/login
			const options = currentPage.options; //url里面的参数json类型
		},
		async created() {
			try {
				document.querySelector("html").style.fontSize = "10px"; // 解决进入小票html 的font-size = 0 的问题
				const urlone = window.location.href; //获取当前路径
				const pages = getCurrentPages();
				const currentPage = pages[pages.length - 1]; //当前页面的全部信息
				const route = currentPage.route; //当前路由的路径 pages/login/login
				const options = currentPage.options; //url里面的参数json类型
				let subMchId = options.sub_mch_id;
				let outTradeNo = options.out_trade_no;
				let checkCode = options.check_code;
				
			} catch (err) {
				console.log(err)
			}
		},
		mounted() {
			const mchData = {
				action: "onIframeReady",
				displayStyle: "SHOW_CUSTOM_PAGE",
			};
			const postData = JSON.stringify(mchData);
			window.parent.postMessage(postData, "*");
		},
		methods: {
			btnBack(){
				// 跳转到指定的h5页面
				const mchData = {
					action: "jumpOut",
					jumpOutUrl: `xxxxx`,//这里是要自己跳转之后的页面地址
				}; // 跳转到指定的页面并携带参数
				const postData = JSON.stringify(mchData);
				window.parent.postMessage(postData, "*");
			}
		}
	}
</script>
 
<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}
 
	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}
 
	.text-area {
		display: flex;
		justify-content: center;
		align-items: center;
		width: 100%;
		height: 300rpx;
	}
 
	.title {
		font-size: 36rpx;
		color: #A26B1C;
	}
	.btn-class{
		width: 400rpx;
		height: 90rpx;
		background: linear-gradient( 90deg, #FFE395 0%, #FFB066 100%);
		border-radius: 96rpx 96rpx 96rpx 96rpx;
		
		font-weight: 700;
		font-size: 36rpx;
		color: #A26B1C;
		line-height: 52rpx;
		text-align: left;
		font-style: normal;
		text-transform: none;
		
		display: flex;
		align-items: center;
		justify-content: center;
	}
</style>

1、需要先配置域名,也就是自己需要点击完成跳转的订单页面的域名,需要服务商提供域名校验文件,上传到自己服务器根目录

image.png

2、添加好域名,并且配置好商家小票链接之后,需要在提供特约商户号、商家订单号、微信支付订单号,生成预览商家小票效果的二维码,微信扫码二维码,即可看到在微信支付完成,用户点击完成之后的效果了。

image.png

3、具体效果,如下图

image.png