## 简要说明
微信公众号微信支付完成后页面跳转 即 点金计划 商家小票的开发
## 内容
#### 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>```