分享

微信支付在Android和IOS上表现不一致 怎么破!

 quasiceo 2015-09-26

开源中国携 200 万开发者开始真正的软件众包  

1
2
3
4
5
function pay(){
    WeixinJSBridge.invoke('getBrandWCPayRequest', <?php echo $weixin_pay_param; ?>, function(res){
        if(res.err_msg == "get_brand_wcpay_request:ok"){}
    });
}

做过微信支付的都应该知道上面的一个JS支付API吧 我就不废话了

上面PHP输出的是一个json对象,里面包含订单信息什么的。

问题是如果是PHP直接输出的,在安卓和ios都没问题,但是如果是ajax传过来的,像下面这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function pay(pay_params) {
    WeixinJSBridge.invoke('getBrandWCPayRequest', pay_params, function(res){
        if(res.err_msg == "get_brand_wcpay_request:ok"){}
    });
}
var ajax_data = {
    url: 'xxx',
    type: 'POST',
    data: {},
    dataType: 'JSON',  
};
ajax_data.success = function(json){
    var param = eval( '('+ json.msg +')' );
    pay(param);
};
$.ajax(ajax_data);
Android上面完全没问题,IOS则会报Args error,没法支付……

不知道有没有人遇到这样的情况 怎么解决的?

附上项目实例:http://m./index.php?act=kgy

在微信里面打开,大家可以分别在安卓和IOS的微信里面试下,看看是不是这样……


duandi duandi
发帖于 1年前
10回/6345阅

按票数排序  显示最新答案   共有10个答案 (最后回答: 4个月前 )

    1
  • duandi duandi 1年前

    关于微信上Android和IOS表现不一致的问题 我现在发现两个 已经全部解决了 喜极而泣……

    第一个关于支付 为什么Android上面能支付而IOS上就不行了呢?

    问题在于支付的时候JSON参数,必须全部是字符串(这个是我没有好好阅读文档,自以为Android上面可以支付了就一定不是我的问题,我认了)。

    比如我的错误是参数中{"timeStamp":12312312},时间戳的值为整型,虽然Android上可以支付,但是IOS上就不行了,必须严格按文档上说的,键和值全部是字符串!这样{"timeStamp":"12312312"}才对!


    第二个问题就有点不能理解了,Android上可以正确获取用户的收货地址,但是IOS上面会报err_msg:get_brand_grant_info:fail,err_desc:no authorized buffer empty

    这个提示让人摸不着头脑了。后来我是怎么解决的呢?根据我几个星期Or一两个月之前的一次谷歌搜索上依稀记得好像某个参数的长度不能太长……

    我看了下收货地址参数中的一个随机数,我用了32位,这样是不是太长了呢(对于IOS来说),于是我改成了12位长度,问题解决,欧了……文档上关于这个随机数的长度没有任何说明


    最后也感谢@mark35 让我省去了参数在客户端转换格式的冗余步骤,希望上面的经验能帮到后面写微信接口的同学们……

    --- 共有 2 条评论 ---
    • duandi 回复 @赖赖啤酒猫 : 以前搜索问题遇见过太多次,提问者问了问题 然后不知怎么解决了 就只在网上留下一句“我已经解决了”之类的,对这种人真是深恶痛绝! 所以我解决的问题都尽量详细写下来,很高兴帮到你 (1年前)   回复
    • 赖赖啤酒猫 首先,感谢你的分享! 我在做支付的过程中,也遇到同样的问题,Android和ios上不同,网上的资料很少,但幸运的是我看到了你的回复,让我的问题迎刃而解! 真的无法表达自己的心情,经历过太多次遇到问题一直找不到答案的时候,这次我真的很幸运,非常感谢! (1年前)   回复
    评论(2)| 引用此答案| 举报 (2014-07-26 13:39)
  • 0
  • duandi duandi 1年前
    按道理来说平台之间的差异不是应该由微信这边来屏蔽掉的吗?这个问题困扰好久了……很伤啊
    评论(0)| 引用此答案| 举报 (2014-07-22 10:09)
  • 0
  • duandi duandi 1年前
    做微信支付的人这么少吗?连个打酱油的人都没有……
    评论(0)| 引用此答案| 举报 (2014-07-23 09:50)
  • 0
  • 小小猫儿 小小猫儿 1年前
    不玩微信 微博的 默默的飘过.....
    --- 共有 1 条评论 ---
    • duandi 打酱油也是一种支持…… (1年前)   回复
    评论(1)| 引用此答案| 举报 (2014-07-23 09:58)
  • 0
  • mark35 mark35 1年前
    dataType设定为'json'返回值会自动转换为js对象的,不用再eval()
    --- 共有 7 条评论 ---
    • mark35 回复 @duandi : 微信内嵌那个webview问题多多,兼容性(尤其是html5)很讨厌 (1年前)   回复
    • duandi 试了 没在客户端转换 ios也是没戏 微信啊微信 呵呵了 (1年前)   回复
    • duandi 回复 @mark35 : 嗯 当时微信封装的一个类 直接输出的就是json的形式了 就没想过用array 我改下这个类试试 (1年前)   回复
    • mark35 回复 @duandi : 直接把json.msg原始数据做成array就行了,为何要多此一举在客户端转换呢 (1年前)   回复
    • duandi 回复 @mark35 : 嗯 parseJSON也试过了 效果一样的 IOS也是没法支付 所以后来项目里面也没动过了 (1年前)   回复
    评论(7)| 引用此答案| 举报 (2014-07-23 10:57)
  • 0
  • mark35 mark35 1年前
    http://m./index.php?act=kgy 这个网页的图片显示尺寸120px,但不是用的缩略图,一个图片就800多kB……
    --- 共有 1 条评论 ---
    • duandi 通宵赶出来的东西 见笑了 (1年前)   回复
    评论(1)| 引用此答案| 举报 (2014-07-23 16:36)
  • 0
  • mark35 mark35 1年前

    err_msg:get_brand_grant_info:fail,err_desc:no authorized buffer empty

    这个问题有点奇葩。不过微信目前就是这样的,包括url某些参数的位置都有先后顺序的,并且POST数据到微信服务器时json的中文不能是\uxxxx的形式

    评论(0)| 引用此答案| 举报 (2014-07-26 16:31)
  • 0
  • atoliu atoliu 1年前
    你们有谁知道 微信Android和IOS的JS接口统一之后 在Android本地代码改如何编写的嘛
    评论(0)| 引用此答案| 举报 (2014-09-05 10:11)
  • 0
  • atoliu atoliu 1年前

    或者介绍下 原理也可以


    评论(0)| 引用此答案| 举报 (2014-09-05 10:11)
  • 0
  • bsh2012 bsh2012 4个月前
    system:access_denied  蛋疼的问题啊
    评论(0)| 引用此答案| 举报 (2015-05-20 11:07)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约