在ios设备上,微信jssdk的支付,如果是通过域名访问,就会提示appid非法,如果将这个url转发一下,支付就正常了;错误提示如附图:
在android设备上不会有这个问题,支付一直都是ok的。
我们的应用地址是: http://m.nzaom.com/ .
使用的jsapi是如下:
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,但并不保证它绝对可靠。
}
});
1
kalman03 2015-07-25 22:19:25 +08:00
同样遇到与LZ一样的问题,最恶心的是,在没有开启debug的状态下,是一种假死的卡住,并没有LZ的图片提示,而是在开启debug的时候,才会弹出这个invalid appid的提示
尼玛,微信支付这货还能不能在H5上好好的玩啊!!!! |
2
kalman03 2015-07-25 22:21:02 +08:00
PS:楼主的riot是个什么东东?
|
3
cgyqqcgy OP |
4
abelyao 2015-07-25 22:30:23 +08:00
|
5
feipinghuang 2015-07-25 23:00:27 +08:00
很多时候都是config的问题,调试的时候先看看wx.cofig有没有问题。
wx.error(function(res){ alert(JSON.stringify(res, null, 4)); }); |
6
cgyqqcgy OP @feipinghuang config没有问题,debug 模式下,提示config ok的
|
7
feipinghuang 2015-07-25 23:09:38 +08:00
@cgyqqcgy 你把appId: options.appid加上试试
|
8
cgyqqcgy OP @feipinghuang 这个我也试过了,没有用。。
|
9
abelyao 2015-07-25 23:11:03 +08:00
@kalman03
@cgyqqcgy @feipinghuang 顺路请教一个问题,也是 JS-SDK 的: 微信的后台有配置 A,B 两个域名为 JS 接口的域名,开发的时候用的是 A 域名,然后要上线了,切换 B 域名,一直就提示 JS-SDK 的签名错误,但是把涉及签名的几个字段,拿到微信的网页上去检查,也都是对的,config 中的 url 也和签名中的 url 一致,很是郁闷。不知道几位能不能想到是什么其它可能的原因? |
10
feipinghuang 2015-07-25 23:15:53 +08:00
@abelyao access_token 的即时刷新
|
11
abelyao 2015-07-25 23:17:39 +08:00
@feipinghuang
我原先在数据库中缓存了 access_token 和 jssdk_ticket,只有过期的话才重新获取新的。 但出了这个问题之后,我把数据库中的所有缓存都删了,也等于是即时获取了两个新的,但还是提示签名错误,o(︶︿︶)o 唉 |
12
feipinghuang 2015-07-25 23:22:33 +08:00
@abelyao 要不你加我微信(feipinghuang)吧 咋们深度探讨一下这个问题 😄
|
13
abelyao 2015-07-25 23:27:37 +08:00
@feipinghuang 好的,回头加你,现在手机打不出中文了,在重置手机… /t/208320
|
14
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的) |
15
abelyao 2015-07-26 00:04:45 +08:00
@kalman03 同样的代码,换回 A 域名就正常,换到 B 域名就提示签名出错,所以不是代码有问题,而且大小写的问题也检查了好几次… AB 两个域名都有在 JS 调用域名的列表中。
|
16
mgcnrx11 2015-07-26 00:23:49 +08:00
@abelyao OAuth授权域名是A域名吧?这个也是有关系的,因为我一直记得不能写两个域名测试,测试OK了必须上去mp后台配域名
|
17
abelyao 2015-07-26 00:32:13 +08:00
@mgcnrx11 开发的时候 oauth 用 A 域名,部署到 B 域名的时候有把 oauth 改到 B 域名去,因为我的第一部是在 PHP 端校验 SESSION 如果没有就先进授权了,所以换 B 域名这个肯定得改,过了授权才有加载 JS 的事…
|
18
juneszh 2015-07-26 00:37:47 +08:00
握爪 互勉 今天也是为了公众号搞了一天微信JDSDK支付
|
19
Winny 2015-07-27 10:25:19 +08:00
检查一下支付设置中的地址是否正确(区分大小写。)
|