APP支付报错ALI40247处理方案

来自    APP支付与登录 | 
作者:我是个导演  |  更新于:2016-09-07 15:41:29     
接口名:alipay.trade.app.pay
APP支付交易参数验证不通过,可以根据下面的思路去分析和排查。出现此类异常时,系统交互如下:

注意红色字体部分信息交互,此时商户客户端会收到详细错误信息,包含具体错误码以及错误描述(注意:支付宝app弹窗提示中的错误文案,为用户视角所看到的错误信息,不可用于开发者视角用于排查问题的依据)。错误信息格式样例如下:

其中,sub_code 和 sub_msg 为具体错误原因,可参照“错误码描述”来进行排查和解决。
错误码描述:
1)签名相关错误
可参照公共返回码部分。
2)接口传参异常

同时,还可参考以下方向来检查:

1.检查APPID对应的支付宝账号是否有App支付接口的权限,可进入 我的商家服务 -签约管理里面查看签约情况;
2.检查使用的环境:线上环境网关: https://openapi.alipay.com/gateway.do,沙箱环境网关: https://openapi.alipaydev.com/gateway.do,对应的环境请使用对应的APPID;
3.检查自己的公钥和私钥是否匹配,并在支付宝正确上传自己的公钥,并获取对应的支付宝公钥,详见 上传公钥并获取支付宝公钥
说明: 使用RSA或RSA2就使用对应的支付宝公钥。
4.检查 请求支付编码和是否做url encode,
编码:就是请求了utf-8 但是用了gbk的编码,
encode:app支付接口(接口名称:alipay.trade.app.pay)对请求字符串的所有一级value(biz_content作为一个value)进行encode。
5.检查APPID对应的应用是否已经上线,可进入 蚂蚁金服开放平台-开发者中心-应用 查看自己的应用状态;
说明: 应用在上线状态下才可以在线上环境测试APP支付接口,否则只能在沙箱环境下测试,详见 APP支付沙箱联调指南
6.检查请求参数格式是否符合要求,重点检查 检查biz_content业务参数的json格式是否正确以及对应的业务参数格式是否正确。如检查非空参数是否都已经传了,sign有没有做encode,或者是否多做了一次encode等
特别注意的是 ,APP支付不支持第三方应用授权,请不要传参数app_auth_token;
详严格按照官方提供的App支付文档去开发集成。
volient丶duan | 2016-09-08 14:03:13
本人使用iOS集成,遇到了这样的问题:使用旧版本SDK不会报错,但是使用新版本就会报这个错误,请问怎么解决?
我是个导演 | 2016-09-08 14:09:44
volient丶duan:本人使用iOS集成,遇到了这样的问题:使用旧版本SDK不会报错,但是使用新版本就会报这个错误,请问怎么解决?回到原帖
旧版本的sdk是指什么意思?新版本有时指什么?把你调用旧版本接口名称和新版本名称调用的接口名称贴出来看一下
volient丶duan | 2016-09-08 15:58:43
我是个导演:旧版本的sdk是指什么意思?新版本有时指什么?把你调用旧版本接口名称和新版本名称调用的接口名称贴出来看一下回到原帖
调用的接口没变

- (void)payOrder:(NSString *)orderStr
      fromScheme:(NSString *)schemeStr
        callback:(CompletionBlock)completionBlock;

但是orderStr结构不一样

旧版本:"_input_charset=utf-8&body=测试&notify_url=http://120.26.92.167:8080/XFWY/app/bliss_notify.htm&out_trade_no=a1f89826976940b9af77bfbe8301220c&partner=xxxxxxxx&payment_type=1&return_url=http://120.26.92.167:8080/XFWY/app/bliss_return.htm&seller_id=xxxxxxxx@qq.com&service=mobile.securitypay.pay&subject=测试测试&total_fee=0.01&sign=*********&sign_type=RSA"

新版本:"app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.02","subject":"1","body":"我是测试数据","out_trade_no":"ZQLM3O56MJD4SK3"}&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA&timestamp=2016-07-28 20:36:11&version=1.0&sign=*********"
我是个导演 | 2016-09-08 16:15:40
mobile.securitypay.pay这个是1.0的接口移动支付alipay.trade.app.pay这个是2.0接口APP支付接口,你调用新版本报错ALI40247走我上面写的重新签约 方案去重新签约
我是个导演 | 2016-09-08 16:16:49
我是个导演:mobile.securitypay.pay这个是1.0的接口移动支付alipay.trade.app.pay这个是2.0接口APP支付接口,你调用新版本报错ALI40247走我上面写的重新签约 方案去重新签约回到原帖
我看的是service和method这个就是调用的接口名称&service=mobile.securitypay.pay和method=alipay.trade.app.pay
volient丶duan | 2016-09-08 16:24:24
嗯嗯,我试试!之前看到过相关的帖子您说的应该是对的,谢谢您的帮助!^_^
xel | 2016-09-19 11:40:29
为什么我按照你的方式做了,还是报这个错误呢
叁陆伍网络信息 | 2016-09-19 12:28:49
签约后  是否一定要上线才能正常调用
Mitsein | 2016-09-19 13:58:22
xel:为什么我按照你的方式做了,还是报这个错误呢回到原帖
签约了吗?  确定appid正确吗? 你可以提供我这边帮你查一下
叁陆伍网络信息 | 2016-09-19 14:55:51
RSA(SHA1)签名验签方法封装,是怎么签名的,php的是这样么?
function sha1WithRsaSign($data, $private_key_path) {
        $priKey = file_get_contents($private_key_path);
        $res = openssl_pkey_get_private($priKey);
        openssl_sign($data, $sign, $res,OPENSSL_ALGO_SHA1);
        openssl_free_key($res);
        //base64编码
        $sign = base64_encode($sign);
        return $sign;
}
叁陆伍网络信息 | 2016-09-19 15:02:01
App支付请求参数,用的是私钥,那支付宝公钥什么时候用呢!
Mitsein | 2016-09-19 15:02:30
叁陆伍网络信息:RSA(SHA1)签名验签方法封装,是怎么签名的,php的是这样么?
function sha1WithRsaSign($data, $private_key_path) {
        $priKey = file_get_con...
回到原帖
嗯 这是读取文件的方式。第四句 openssl_sign($data, $sign,$res);这样就够
我是个导演 | 2016-09-19 15:05:40
叁陆伍网络信息:App支付请求参数,用的是私钥,那支付宝公钥什么时候用呢!回到原帖
支付宝公钥是验签时使用的
叁陆伍网络信息 | 2016-09-19 15:26:08
此帖已被屏蔽
我的回复
回复数
 210
阅读数
 158999

返回顶部