V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cgyqqcgy
V2EX  ›  微信

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

  •  
  •   cgyqqcgy · 2015-07-25 22:05:14 +08:00 · 5642 次点击
    这是一个创建于 3428 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 在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,但并不保证它绝对可靠。
                        }
                    });
    

    错误提示

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

    尼玛,微信支付这货还能不能在H5上好好的玩啊!!!!
    kalman03
        2
    kalman03  
       2015-07-25 22:21:02 +08:00
    PS:楼主的riot是个什么东东?
    cgyqqcgy
        3
    cgyqqcgy  
    OP
       2015-07-25 22:28:22 +08:00
    abelyao
        4
    abelyao  
       2015-07-25 22:30:23 +08:00
    @kalman03
    @cgyqqcgy
    微信 JS-SDK 的坑太多了…
    说到假死,我在两部 iPhone 上随便 alert 几个字符,点确定都关不掉,只能后台关闭微信
    feipinghuang
        5
    feipinghuang  
       2015-07-25 23:00:27 +08:00
    很多时候都是config的问题,调试的时候先看看wx.cofig有没有问题。
    wx.error(function(res){
    alert(JSON.stringify(res, null, 4));
    });
    cgyqqcgy
        6
    cgyqqcgy  
    OP
       2015-07-25 23:01:55 +08:00
    @feipinghuang config没有问题,debug 模式下,提示config ok的
    feipinghuang
        7
    feipinghuang  
       2015-07-25 23:09:38 +08:00
    @cgyqqcgy 你把appId: options.appid加上试试
    cgyqqcgy
        8
    cgyqqcgy  
    OP
       2015-07-25 23:10:58 +08:00
    @feipinghuang 这个我也试过了,没有用。。
    abelyao
        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 一致,很是郁闷。不知道几位能不能想到是什么其它可能的原因?
    feipinghuang
        10
    feipinghuang  
       2015-07-25 23:15:53 +08:00
    @abelyao access_token 的即时刷新
    abelyao
        11
    abelyao  
       2015-07-25 23:17:39 +08:00
    @feipinghuang
    我原先在数据库中缓存了 access_token 和 jssdk_ticket,只有过期的话才重新获取新的。
    但出了这个问题之后,我把数据库中的所有缓存都删了,也等于是即时获取了两个新的,但还是提示签名错误,o(︶︿︶)o 唉
    feipinghuang
        12
    feipinghuang  
       2015-07-25 23:22:33 +08:00
    @abelyao 要不你加我微信(feipinghuang)吧 咋们深度探讨一下这个问题 😄
    abelyao
        13
    abelyao  
       2015-07-25 23:27:37 +08:00
    @feipinghuang 好的,回头加你,现在手机打不出中文了,在重置手机… /t/208320
    kalman03
        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的)
    abelyao
        15
    abelyao  
       2015-07-26 00:04:45 +08:00
    @kalman03 同样的代码,换回 A 域名就正常,换到 B 域名就提示签名出错,所以不是代码有问题,而且大小写的问题也检查了好几次… AB 两个域名都有在 JS 调用域名的列表中。
    mgcnrx11
        16
    mgcnrx11  
       2015-07-26 00:23:49 +08:00
    @abelyao OAuth授权域名是A域名吧?这个也是有关系的,因为我一直记得不能写两个域名测试,测试OK了必须上去mp后台配域名
    abelyao
        17
    abelyao  
       2015-07-26 00:32:13 +08:00
    @mgcnrx11 开发的时候 oauth 用 A 域名,部署到 B 域名的时候有把 oauth 改到 B 域名去,因为我的第一部是在 PHP 端校验 SESSION 如果没有就先进授权了,所以换 B 域名这个肯定得改,过了授权才有加载 JS 的事…
    juneszh
        18
    juneszh  
       2015-07-26 00:37:47 +08:00
    握爪 互勉 今天也是为了公众号搞了一天微信JDSDK支付
    Winny
        19
    Winny  
       2015-07-27 10:25:19 +08:00
    检查一下支付设置中的地址是否正确(区分大小写。)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   905 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:57 · PVG 04:57 · LAX 12:57 · JFK 15:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.