实战中微信支付宝遇到的各种坑(总结)

在我们集成微信支付、支付宝支付的时候总会遇到些难以理解、难以捉摸的各种问题,现将我在项目集成微信支付、支付宝支付遇到的问题总结如下,希望对大家有帮助!!!

一、在集成微信支付遇到的问题

1:同样的签名android能用,iOS用就不行
解决方式:
第二次签名还是传给客户端都要用 @"Sign=WXpay" ,并且不能有空格
有时候服务端给的数据我们这边解决会多个空格或者解析出错,请仔细检查比对,实在不行把微信官方demo拿来套。
 这个.req.packageValue=”Sign=WXPay”,一般都是这样写死这个参数值。也有人说写成req.packageValue=”prepay_id=”?+?prepayid,经测试Android两种写法都是可以调起微信支付的,至少最新版本SDK是可以的,以后则不清楚,官方也建议写Sign=WXPay,据说iOS只支持这种写法。
--------------------- 

2:我遇到的问题是这样的:当发起支付时调不出微信支付界面,直接响应WXPayEntryActivity中的onResp回调,并且errCode始终返回-1。如果微信未登录,则会调起登陆界面,登陆完成后还是调不起来,errCode依然返回-1。
解决问题:
生成sign时特别需要注意,首先将key-value键值对拼成字符串,注意key都要小写
appid错误,首先先检查app端和服务器端的appid是否与微信官方提供的一致。这次遇到的问题就是这个问题,搞了我两天,最后debug的时候,发现后台提供的appid和微信官网申请到的appid不一样,这是很奇怪的,相信微信不会给后台提供一个,app端提供另一个,带着这个疑问去debug之前的项目,从之前项目打印看出,两者一致的。

package:这个字段,一定要传,签名的时候后台一定要加进去,为什么坑呢,因为微信文档里写着,“”暂填写固定值Sign=WXPay”,坑了很多人,很多人不写就会出错。还有就是用android 中gson解析的时候package与java关键字冲突(不知道微信是怎么想的。。),要手动解析,或者你就不管它,手动赋值“Sign=WXPay”
--------------------- 

3.获取预支付id时候,微信返回的信息是:
商户号mch_id与appid不匹配
解决方式:

微信开放平台是一个号可以申请多个app,但是要想开通微信支付,是一个app对应一个商户号的。每个app的商户号都是不同的。请检查是否一一对应。
--------------------- 

4.签名错误
:注意签名参数的大小写,支付密钥key要到商户平台设置,设置的规则是32位数字与字母大小写的组合(不能随便填写,用在线工具生产)。
:body有中文时注意转码 首先换成英文试试看是不是编码问题
:参与签名生成的xml文件格式是否正确
参数body含有中文字符,改换英文签名成功,通过转换字符编:
$dat = iconv('UTF-8','ISO8859-1',array2xml($package));

二、在集成支付宝支付遇到的问题

 


1. 支付报错 4000 系统繁忙
 解决问题:AndroidMinifest.xml配置文件中,少了activity配置.
<activity
           
   android:name="com.alipay.sdk.app.H5PayActivity"
                android:configChanges="orientation|keyboardHidden|navigation"
          android:exported="false"
              android:screenOrientation="behind" >
  
 </activity>
先看参数是否齐全,再看签名,如果是后台加的签需要把+  /   = 之类的改成ASCII 字符(十六进制格式)

2.弹框显示弹框显示交易失败,请稍后再试
解决方案:
仔细检查私钥跟商户上传的公钥不匹配

3.支付宝验签的坑

我们集成支付宝返回的数据中有一个叫alipay_trade_app_pay_response 字段值,里面的值必须按支付宝返回的的数据顺序来,一点也不能动,不要想用fastjson来处理了,应当直接用原生的json来处理,这样里面获取的数据顺序就不会被改变.这个时候才可以通过验签必须通过 
JSONObject object = new JSONObject(resultInfo);
            String response = object.getString("alipay_trade_app_pay_response");来解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值