微信公众号JSAPI支付完成后闪退问题处理
问题:支付完成点击下图所示的完成按钮,直接闪退(强制关闭)
调试发现如果客户唤起支付界面 输入密码时 取消支付了会进入if(res.err_msg == “get_brand_wcpay_request:cancel”){ 然后跳转到我自己的支付失败界面,
但是支付成功的就闪退了,queryPay() 函数是会执行的,就是页面执行到res的回调函数,微信容器强制关闭页面了
原因:微信点金计划导致的,未配置点金计划的,点击完成按钮就强制关闭
微信官方公告链接
https://pay.weixin.qq.com/index.php/public/cms/content_detail?platformType=1&lang=zh&id=121505
解决方法 微信商户配置点金计划
配置商家小票链接
https协议的链接 ,需要把检验文件放到https://xxxxx.cn/xxxx/static/这一级目录才能配置上去
https://xxxxx.cn/xxxx/static/payCallBack402.html
payCallBack402.html 页面规则
payCallBack402.html 里如果没按微信规则写js,则商家小票页会显示如下(无法获取订单信息),当然无法获取订单信息的原因有多个,没按微信规则配置是其中一个
点金计划产品文档
(点金计划具体产品开通及操作流程,请参考《点金计划产品文档》)
https://wx.gtimg.com/pay/download/goldplan/goldplan_product_description_v2.pdf
文档内容有多,我只关注我需要用到的,我大致看了下整理了一下规则、逻辑
1、商家小票里会iframe嵌入 https://xxxxx.cn/xxxx/static/payCallBack402.html
2、payCallBack402.htmlscript必须引入
<script type="text/javascript" charset="UTF-8" src="https://wx.gtimg.com/pay_h5/goldplan/js/jgoldplan-1.0.0.js">
3、payCallBack402.html 不能有违规行为,如果不当言论、自动跳转的方法
4、微信irfame访问我们配置的链接时,会拼接订单号等、我们可以使用订单号反查订单做一些业务操作,显示信息
5、payCallBack402.html必须按照微信提供的api,与iframe父页面交互初始化商家小票
$(function(){
// 初始化小票
let initData ={
action:'onIframeReady',displayStyle:'SHOW_CUSTOM_PAGE'};
let postData = JSON.stringify(initData);
//与ifarem 交互
//parent.postMessage(postData,'https://payapp.weixin.qq.com')
top.postMessage(postData, '*')
});
6、payCallBack402.html必须按照微信提供的api,与iframe父页面交互自定义按钮跳转到指定H5
/***
* 跳转至其他页面
***/
function back(){
const showUrl ='https://xxx.cn/xxx/xxxxxWxOrder.do';
let mchData ={
action:'jumpOut', jumpOutUrl:showUrl}
let postData = JSON.stringify(mchData)
//parent.postMessage(postData,'https://payapp.weixin.qq.com')
top.postMessage(postData, '*')
}
payCallBack402.html 示例
<!DOCTYPE html>
<html lang="en"