10
回答
微信支付在Android和IOS上表现不一致 怎么破!
注册华为云得mate10,2.9折抢先购!>>>   
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传过来的,像下面这样

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.kbao001.com/index.php?act=kgy

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


举报
duandi
发帖于4年前 10回/10K+阅
共有10个答案 最后回答: 3年前

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

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

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

顶部