## 简要说明
微信公众号微信支付完成后页面跳转 即 点金计划 商家小票的开发
## 内容
#### 1.什么是点金计划和点金计划接入前准备
注:配置商家小票链接不能带参数
什么是点金计划:点金计划是微信支付官方提供的支付后回调能力的升级计划。
点金计划接入前准备:
https://pay.weixin.qq.com/wiki/doc/apiv3_partner/open/pay/chapter3_5_2.shtml
PDF开发文档:
https://wx.gtimg.com/pay/download/goldplan/goldplan_product_description_v2.pdf
#### 2.问题描述
最近在使用uniapp 开发微信公众号页面,有支付订单功能,在完成支付后,发现支付后的success,一直无法响应,原因是微信支付完成后的回调能力被回收,已强制性的由点金计划的功能来替代(广告创收)。
#### 3.问题代码
```
wx_pay: function(msg,data) {
var that = this
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId": data.appId, //公众号名称,由商户传入
"timeStamp": data.timeStamp, //时间戳
"nonceStr": data.nonceStr, //随机串
"package": data.package, //扩展包
"signType": data.signType, //微信签名方式:MD5
"paySign": data.paySign //微信签名
}, function(respay) {
if (respay.err_msg === "get_brand_wcpay_request:ok") {
// 就是这里,无法操作跳转。
//微信之前(公众号支付/H5网页支付)支付成功,点击完成可直接跳转指定页面。
// 后已修改。如果没有开通点金计划的服务商,支付后就会直接关闭商家页面。
// 开通点金计划可直接在服务商功能的点金计划查看
} else if (respay.err_msg === "get_brand_wcpay_request:cancel") {
that.msg("取消支付") //用户取消支付的时候这里会执行
} else if (respay.err_msg === "get_brand_wcpay_request:fail") {
}
}, function(err) {
});
}
```
#### 4.uniapp开发小票
UNIAPP开发有坑需要注意几个坑:
第一个坑:支付成功之后跳转到小票页面安卓手机没有问题,但是IOS的小票页面显示空白并且会闪一下,网上说的方法都试过了整不好于是只能使用原生H5开发了。
第二个坑:这个点金计划商家小票页面必须在page.json配置中的第一个,由于第一个是启动页只能在页面里面做判断,思路根据数据缓存添加一个值进行判断(例如用户进入系统判断这个值是否存在,存在的话让他跳转跳转小票页面,在onLoad里面做判断即可)
```
<template> <view style="display: grid;"> <view> <view style=""> <u-icon name="checkbox-mark" color="#2979ff" size="50"></u-icon> </view> <view> 您的订单支付完成 </view> </view> <u-button type="primary" size='medium' shape="circle" @click='toOrder()' :plain="true">返回订单列表</u-button> </view> </template> <script> export default { data() { return { sub_mch_id: '', out_trade_no: '', // orderInfo: {}, } }, onLoad(option) { //option里面的参数微信返回这里自动接收 this.sub_mch_id = option.sub_mch_id; //特约商户号 this.out_trade_no = option.out_trade_no; //商户订单号 }, onReady() { const customPageHeight = document.body.scrollHeight; // 单位 px let mchData = { action: 'onIframeReady', displayStyle: 'SHOW_CUSTOM_PAGE', height: customPageHeight }; let postData = JSON.stringify(mchData); parent.postMessage(postData, 'https://payapp.weixin.qq.com'); }, methods: { toOrder: function() { var code = this.code var mchData = { action: 'jumpOut', jumpOutUrl: 'https://www.text.com/mobile/state=STATE#/pages/house/house_repair' //需要跳转的路径 } var postData = JSON.stringify(mchData) parent.postMessage(postData, 'https://payapp.weixin.qq.com') }, } } </script>
```
#### 5.H5开发小票
```
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="referrer" content="origin"> <meta name="viewport" content="width=device-width, viewport-fit=cover, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <title>支付完成</title> <script type="text/javascript" charset="UTF-8" src="https://wx.gtimg.com/pay_h5/goldplan/js/jgoldplan-1.0.0.js"> </script> <script type="text/javascript" src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script> <script type="text/javascript" src="https://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <style> body { font-family: PingFang SC, "Helvetica Neue", Arial, sans-serif; } *{ margin: 0; padding: 0; } .order_box { /* text-align: center; */ } .b_name { font-size: 18px; font-weight: 500; color: #ffffff; padding: 10px 0; width: 100%; background: #439CFE; text-align: center; } .col_box { display: flex; align-items: center; flex-direction: column; padding: 10px; } .col_box .col_box_img{ width: 50px; height: 50px; /*border: 1px solid red;*/ } .col_box .lab { font-size: 25px; margin-top: 20px; } .num{ color: #B8B8B8; font-size: 15px; width: 75%; margin: 0 auto; } .num_2{ margin-top: 10px; } .btns { width: 80%; text-align: center; background-color: #26b983; margin: 0 auto; border-radius: 50px; margin-top: 30px; } .btns .btn { padding: 9px 0; color: #FFFFFF; } </style> </head> <body > <div class="order_box"> <div class="col_box"> <img class="col_box_img" src="https://test.com/static/theme/img/8ad7e63c0d362ef38f9eefa923ec81d.png" > <div class="lab" style="">支付成功 !</div> </div> <div id="" class="num"> <div id="order_amount" class="num_2"></div> <div id="order_no" class="num_2"></div> <div id="date" class="num_2"></div> </div> <div class="btns"> <div id="backHome" class="btn home" onclick="shouye()">回到首页</div> </div> </div> <script> //初始化console //var vConsole = new VConsole(); //获取返回页面参数 function getQueryString(name) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] == name) { return pair[1]; } } return null; }; var sub_mch_id = getQueryString("sub_mch_id"); //特约商户号 var out_trade_no = getQueryString("out_trade_no"); //商户订单号 var check_code = getQueryString("check_code"); //md5 校验码 $(function(){ $.ajax({ url:"/applet/api.preowned/act_session", data:{out_trade_no: out_trade_no}, dataType:'json', type:'post', async:true, error:function(e){ console.log(e); }, success:function(res){ console.log(res.data.date) $("#order_no").html('订单编号:'+res.data.order_no) $("#date").html('交易时间:'+res.data.create_at) $("#order_amount").html('订单金额:¥'+res.data.order_amount) } }) }) </script> <script> //var homeLink = "http://test.com/mobile/#/pages/oneMy/myBuyOrder";//首页(例子) var homeLink = "https://test.com/test/#/";//首页(例子) function init(){ //初始化小票 var initData = { action: 'onIframeReady', displayStyle: 'SHOW_CUSTOM_PAGE', height:600 } var initPostData = JSON.stringify(initData) parent.postMessage(initPostData, 'https://payapp.weixin.qq.com') console.log("初始化"); } init(); //注册点击事件(去首页) function shouye() { var mchData = { action: 'jumpOut', jumpOutUrl: homeLink //跳转的页面 } var postData = JSON.stringify(mchData) parent.postMessage(postData, 'https://payapp.weixin.qq.com') console.log("首页"); } </script> </body> </html>
```