调起微信支付失败
功能流程:
- 应用端发起支付申请
- 服务端生成订单进行签名后返回
- 应用端使用订单在应用内调起微信进行支付
问题现状:无法正常调起微信,返回-1
错误码。
按照正常处理逻辑,查一下该错误码的解释说明把。
不查不要紧,一查就痛心疾首;接过支付宝的都知道会描述一个具体的原有,但是微信支付如下:
- 错误码为:
-1
- 可能原因:
签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等
这下没法子了,只能一处一处的依次检查了。
一、相关文档
一、官方处理意见
-
使用微信的在线签名工具检查签名是否和程序生成的一致 签名工具用谷歌打开。
选择MD5,XML,然后把请求参数xml放进去,就能校验签名。 -
如果和微信的在线签名工具一致,说明程序没有错误,确定是API密钥错误(被别人改动或者记错了)
在商户平台的账户信息中更改API密钥(账户设置-安全设置-API安全), 15分钟后生效
- 统一下单用的是A商户号,也必须是A商户号登陆商户平台设置key才对。
- 要注意统一下单请求参数中total_fee参数的类型是int类型。
- 如果和微信的在线签名工具不一致,说明程序有错误,常见的错误可能是:
- 编码问题,确保所有的都是utf-8的. 如果有中文, 可以先把中文改成英文重新签名,看是否签名错误,如果英文不会错中文才会错,基本肯定是编码问题
- 消息中字段大小写和文档中完全一致
二、核对流程
1. 检查应用APPID
APPID是微信开发平台对我们应用生成的唯一标识;核对移动项目配置中的APPID是否有误。
- HBuilderX在线打包项目直接核对manifest.json中的配置:
- Android项目在AndroidManifest.xml中配置:
- iOS项目在info> URL Types下配置:
2. 检查服务端商户号
商户号是具体收款的个体,是在服务端访问微信支付相关接口时使用的。
核对该商户号码是否填写或配置错误。
- 服务端得到数据后需要再次进行签名。
当服务端无法确认时,我们可以使用微信官方提供的微信支付接口签名校验工具自己生成sign和postMan获取订单。
3. 检查应用包名
检测应用的包名和开发平台配置的是否为同一包名,否则微信将无法确认应用。
-
HBuilder X在线打包项目,在发起打包时设置:
-
Android原生项目,在build.gradle中设置:
-
iOS原生项目,在General中:
4. 检查应用签名
Andorid应用使用微信的在线签名工具检查签名是否和程序生成的一致。
5. 配置通用链接
iOS平台微信SDK更新需要配置通用链接(Universal Links)
- iOS原生项目,在info.plist中:
配置UniversalLinks值,该值和微信开放平台配置的一致。
我本次的支付失败经过排查就是在此处填写错误导致的!
并确认在工程的AppDelegate.m系统通用链接方法中调用框架方法如下:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
[PDRCore handleSysEvent:PDRCoreSysEventContinueUserActivity withObject:userActivity];
restorationHandler(nil);
return YES;
}