关于微信支付的那些坑

标签: 微信公众号开发 微信支付
85人阅读 评论(0) 收藏 举报
分类:

最近在做微信支付,原本是用原版的支付方式;

关于一些支付所需参数,

    我这里先假设参数都没有问题;

这里是微信内H5调起支付的代码:

function onBridgeReady(){
   WeixinJSBridge.invoke(
       'getBrandWCPayRequest', {
           "appId":"wx2421b1c4370ec43b",     //公众号名称,由商户传入     
           "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数     
           "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
           "package":"prepay_id=u802345jgfjsdfgsdg888",     
           "signType":"MD5",         //微信签名方式:     
           "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 
       },
       function(res){     
           if(res.err_msg == "get_brand_wcpay_request:ok" ) {}     // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。 
       }
   ); 
}
if (typeof WeixinJSBridge == "undefined"){
   if( document.addEventListener ){
       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
   }else if (document.attachEvent){
       document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
       document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
   }
}else{
   onBridgeReady();
}
老版的微信支付到这里基本就结束了,关于一些:
get_brand_wcpay_request:fail 这种异常,

我们使用:

alert(JSON.stringify(res));

直接可以打印出对应的错误信息;


------------------------------------------我是一条分割线---------------------------------------

接下来是jssdk的,

wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
    alert(JSON.stringify(res));
    if(res.errMsg == "chooseWXPay:ok"){
         // 支付成功后的回调函数
         
         apus.ui.toastr.info("支付成功");
    }else{
         apus.ui.toastr.info("支付失败");
         alert(res.errMsg);
    }
 },
cancel: function () {
    alert("取消");
//  window.location.href = "cart3.aspx?Code=<%=Code %>";
},
error: function (e) {
    alert("失败");
}
});

当然,wx.chooseWXPay()这个方法是jssdk的,所以必须要引:

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

这个js;

而且必须要先进行jssdk初始化:

wx.config({
  	    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  	    appId: '', // 必填,公众号的唯一标识
  	    timestamp: '', // 必填,生成签名的时间戳
  	    nonceStr: '', // 必填,生成签名的随机串
  	    signature: '',// 必填,签名,见附录1
  	    jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  	});

这里安卓手机最常出现的错误就是:

"errMsg":"chooseWXPay:fail"

这是jssdk最恶心的地方,不过能报这个错,基本都不会是大问题,大都是细节要注意一下,例如:

微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符

或者支付授权目录的配置问题;

细心找一下,还是可以找到的;

不过出现最多的,大部分都是当前页面url未注册的问题;

因为我们是公众号开发,所以会有shopId和wx标识存在,例如http://www.abc.cn/shop33333/wx11/pay/index.html;

像这样的请求地址,我们在配置支付授权目录的时候,必须要配到http://www.abc.cn/shop33333/wx11/pay/;

    很多框架会直接省略掉后面的index.html;这样的话我们的请求路径就是http://www.abc.cn/shop33333/wx11/pay;

那么我们的支付授权目录则配到:http://www.abc.cn/shop33333/wx11/;这样就可以了;


下面贴一些对应的错误解决方法,主要是链接!

比较综合的:

https://www.cnblogs.com/xueranzp/p/5287691.html

问题解决不绝对,只是提供建议

"errMsg":"chooseWXPay:fail"

https://liball.me/wxpay-is-shit/

https://blog.csdn.net/u013076997/article/details/52327958


因为我个人研究了好几天,到后来才发现,最终还是支付授权目录的坑;



查看评论

微信公众号支付开发流程与避坑手册-Java篇

最近完成了微信公众号内的未支付功能,当然开发的过程中难免遇到各种各样的问题,在这里把我开发的过程分享出来,给大家做个参考。 首先,在准备开发的时候需要进行必要的配置。1.登录微信商户平台,在产品中心...
  • programerxiaoer
  • programerxiaoer
  • 2017-10-03 15:21:53
  • 906

记录微信分享开发过程中碰到的那些坑

1、分享Link必须要和安全域名一致2、title、desc中出现敏感字不会显示图标(比如:元  红包  现金)3、图标大小不能超过300*300像素...
  • xiaofeng20182018
  • xiaofeng20182018
  • 2018-04-17 11:31:04
  • 66

我做微信支付踩过的坑

刚刚参加实习,很多东西都不懂,微信支付是最近才接触到的,开始去看官方文档的时候,一大堆文字东西说明看的有点蒙圈,好像很难的样子,但是随着慢慢的熟悉,微信支付其实也就那样(事实上我却做了两天微笑,渣渣....
  • qq_28468727
  • qq_28468727
  • 2017-02-09 23:04:42
  • 651

微信支付提示{"errMsg":"chooseWXPay:fail"}

微信支付,调用JSSDK wx.chooseWXPay({ timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付...
  • ahywg
  • ahywg
  • 2015-11-06 09:47:59
  • 25331

微信开发问题(非支付目录问题)choosewxpay fail解决

开发微信支付,一直报错choosewxpay fail错误,按照网上说的,仔细检查了支付目录配置和代码,没有错,参数也传递正确,最终发现错误,改正如下: $('#chooseWXPay').on('...
  • u013283562
  • u013283562
  • 2015-12-28 18:14:40
  • 10782

微信支付接口返回chooseWXPay:fail

微信支付接口返回chooseWXPay:fail基本都是参数问题引起的 wx.chooseWXPay({ appId: "", timestamp: "", // 支付签名时间戳,注意微信jss...
  • zyf_balance
  • zyf_balance
  • 2015-10-21 08:33:32
  • 14673

微信公众号支付签名验证错误chooseWXPay:fail

微信公众号支付
  • qq_27053103
  • qq_27053103
  • 2017-08-09 14:17:35
  • 5091

微信 chooseWXPay fail问题解决(非支付目录配置问题),支付接口参数问题

开发支付功能,遇到chooseWXPay fail问题,仔细检查后,支付目录配置正确,代码无问题,却一直无法成功调用接口,最终测试发现问题是由于 参数错误导致. $('#chooseWXPay')...
  • u013283562
  • u013283562
  • 2015-12-28 18:32:46
  • 3289

开发微信支付所碰过的壁

最近因为项目需要,要在项目中添加微信支付的功能。下面和大家分享我在开发的过程中所碰到的一些问题。 对于微信支付,官方给出了相应的文档。需要大家耐心,仔细,仔细,再仔细的去阅读他的文档。这里我注重强调仔...
  • xy752068432
  • xy752068432
  • 2017-07-29 17:48:15
  • 488

微信公众号开发中遇到的问题——支付(二)

第一次开发微信公众号,也是第一次接触微信公众号的支付,我使用的是jssdk,用h5页面调用的支付,后台使用的是java。首先声明,我不是一个愤世嫉俗的人,也不喜欢吐槽,我认为别人提供接口就已经很不错了...
  • u013076997
  • u013076997
  • 2016-08-26 14:16:40
  • 20848
    个人资料
    等级:
    访问量: 481
    积分: 32
    排名: 191万+
    文章存档