ALI40247-自查方案

来自    APP支付与登录 | 
作者:我是个导演  |  更新于:2016-09-07 15:41:29     

说明

  该报错只会出现在app支付【alipay.trade.app.pay 】接口中。

  APP支付交易参数验证不通过,建议根据下面的思路去分析和排查。出现此类异常时系统交互如下:

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

  其中,sub_code 和 sub_msg 为具体错误原因,可参照“错误码描述”来进行排查和解决。

  【公共错误码列表

 

优先测试

  这个错误请优先让客户端同学测试客户端demo,只配置账号和密钥进行测试。

  客户端demo下载地址:https://docs.open.alipay.com/54/104509

  如果客户端可以正常支付请着重检查自己的服务端中的请求参数也就是错误原因中的第7点。

  如果客户端也是相同报错,请按照错误原因中的第1, 2, 4 ,5作为优先排查点。

  注意:客户端demo只配置账号和密钥测试,请勿修改其他参数。

错误原因

 

  1.appid 应用未上线,应用必须是“已上线”状态才可以调用

    检查方法:登录这个地址【点击登录】查看我的应用》调用app支付接口的appid应用是否“已上线”(如下图)

 

  2.没有签约app支付接口或者签约还在审核中

    首先:查看自己是否已经签约app支付接口【点击查看】如何查看签约详情

    如果发现自己未签约或者签约过期请走这个帖子【点击查看】进行自助签约或者人工电话签约

    如果签约在审核中请耐心等待签约生效进行测试。

 

  3.检查app支付测试环境

    A.正式环境网关:https://openapi.alipay.com/gateway.do

    B.沙箱环境网关:https://openapi.alipaydev.com/gateway.do

    注意:请使用对应的环境中的appid和密钥进行测试,千万不要正式环境和沙箱环境混用。

 

  4.公私钥不匹配

    建议走验证公钥正确性流程验证自己的公私钥是否匹配【点击查看验证流程

 

  5.请求使用对应的签名类型

    注意:使用RSA或RSA2就使用对应的支付宝公钥(如下图)

  6.检查 请求支付编码和是否做url encode

    编码charset:就是请求了utf-8 但是用了gbk的编码encode:app支付接口(接口名称:alipay.trade.app.pay)对请求字符串的所有一级value(biz_content作为一个value)进行encode。详情查看请求示例下方说明【点击查看】或者查看sign有没有做encode,或者是否多做了一次encode。

 

  7.请求参数问题

    建议:只传必传请求参数,来缩小报错范围。

    如果您的服务端是java或php可以使用该帖链接下的demo配置账号和密钥进行测试:https://openclub.alipay.com/read.php?tid=2376&fid=60

  特别注意: APP支付不支持第三方应用授权,请不要传参数app_auth_token; 

请严格按照官方提供的【App支付文档】去开发集成。

 

正确提问方式

  如果您根据上述自查方案还是没有查出错误,请按照正确的提问方式进行追问提供信息(信息不完成不回复)

    测试环境(沙箱还是正式)+请求appid+报错请求参数一份+请求时间

    如果有其他情况请详细描述:类似于,本人已经测试官方demo客户端Android和iso都可以支付但是自己开发的的Android端可以ios端不可以,信息越详细越方便判断问题。

 

如果您对该访问有什么疑问和建议欢迎吐槽12

 

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
此帖已被屏蔽
我的回复

返回顶部