微信 JS-SDK 在 ios 上的支付有 bug

2015-07-25 22:05:14 +08:00
 cgyqqcgy
wx.chooseWXPay({
                    timestamp: options.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
                    nonceStr: options.nonceStr, // 支付签名随机串,不长于 32 位
                    package: options.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
                    signType:'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
                    paySign: options.paySign, // 支付签名
                    success: function (res) {
                        if(res.errMsg == "chooseWXPay:ok" ) {
                            riot.route('cart-success')
                        }else{
                            riot.route('cart-fail')
                        }    // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。
                    }
                });

5652 次点击
所在节点    微信
19 条回复
kalman03
2015-07-25 22:19:25 +08:00
同样遇到与LZ一样的问题,最恶心的是,在没有开启debug的状态下,是一种假死的卡住,并没有LZ的图片提示,而是在开启debug的时候,才会弹出这个invalid appid的提示

尼玛,微信支付这货还能不能在H5上好好的玩啊!!!!
kalman03
2015-07-25 22:21:02 +08:00
PS:楼主的riot是个什么东东?
cgyqqcgy
2015-07-25 22:28:22 +08:00
abelyao
2015-07-25 22:30:23 +08:00
@kalman03
@cgyqqcgy
微信 JS-SDK 的坑太多了…
说到假死,我在两部 iPhone 上随便 alert 几个字符,点确定都关不掉,只能后台关闭微信
feipinghuang
2015-07-25 23:00:27 +08:00
很多时候都是config的问题,调试的时候先看看wx.cofig有没有问题。
wx.error(function(res){
alert(JSON.stringify(res, null, 4));
});
cgyqqcgy
2015-07-25 23:01:55 +08:00
@feipinghuang config没有问题,debug 模式下,提示config ok的
feipinghuang
2015-07-25 23:09:38 +08:00
@cgyqqcgy 你把appId: options.appid加上试试
cgyqqcgy
2015-07-25 23:10:58 +08:00
@feipinghuang 这个我也试过了,没有用。。
abelyao
2015-07-25 23:11:03 +08:00
@kalman03
@cgyqqcgy
@feipinghuang

顺路请教一个问题,也是 JS-SDK 的:
微信的后台有配置 A,B 两个域名为 JS 接口的域名,开发的时候用的是 A 域名,然后要上线了,切换 B 域名,一直就提示 JS-SDK 的签名错误,但是把涉及签名的几个字段,拿到微信的网页上去检查,也都是对的,config 中的 url 也和签名中的 url 一致,很是郁闷。不知道几位能不能想到是什么其它可能的原因?
feipinghuang
2015-07-25 23:15:53 +08:00
@abelyao access_token 的即时刷新
abelyao
2015-07-25 23:17:39 +08:00
@feipinghuang
我原先在数据库中缓存了 access_token 和 jssdk_ticket,只有过期的话才重新获取新的。
但出了这个问题之后,我把数据库中的所有缓存都删了,也等于是即时获取了两个新的,但还是提示签名错误,o(︶︿︶)o 唉
feipinghuang
2015-07-25 23:22:33 +08:00
@abelyao 要不你加我微信(feipinghuang)吧 咋们深度探讨一下这个问题 😄
abelyao
2015-07-25 23:27:37 +08:00
@feipinghuang 好的,回头加你,现在手机打不出中文了,在重置手机… /t/208320
kalman03
2015-07-25 23:53:29 +08:00
@abelyao

先检查参与签名的key,特别是大小写,参考我写的(调用wx.chooseWXPay的签名参数):

map.put("appId", model.getAppid());// 公众账号ID
map.put("nonceStr", model.getNonce_str());// 随机字符串
map.put("timeStamp", now);
map.put("package", "prepay_id="+model.getPrepay_id());
map.put("signType", "MD5");

如果是获取调用统一下单,你还需要获取openid,同时注意参与签名的参数值是否进行了encodeURIComponent(正常是需要encodeURIComponent的)
abelyao
2015-07-26 00:04:45 +08:00
@kalman03 同样的代码,换回 A 域名就正常,换到 B 域名就提示签名出错,所以不是代码有问题,而且大小写的问题也检查了好几次… AB 两个域名都有在 JS 调用域名的列表中。
mgcnrx11
2015-07-26 00:23:49 +08:00
@abelyao OAuth授权域名是A域名吧?这个也是有关系的,因为我一直记得不能写两个域名测试,测试OK了必须上去mp后台配域名
abelyao
2015-07-26 00:32:13 +08:00
@mgcnrx11 开发的时候 oauth 用 A 域名,部署到 B 域名的时候有把 oauth 改到 B 域名去,因为我的第一部是在 PHP 端校验 SESSION 如果没有就先进授权了,所以换 B 域名这个肯定得改,过了授权才有加载 JS 的事…
juneszh
2015-07-26 00:37:47 +08:00
握爪 互勉 今天也是为了公众号搞了一天微信JDSDK支付
Winny
2015-07-27 10:25:19 +08:00
检查一下支付设置中的地址是否正确(区分大小写。)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208335

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX