1) 获取APPID
notify_url是异步接口,支付宝会发多次,直到收到你的响应;
至于你说的重复问题,你的后台需要根据流水号、订单号等信息判断是否已经接收过请求并成功处理(insert 支付流水,update订单状态等),处理过就直接返回;
另外notify_url是有次数限制的,如果系统上线后有严重bug或宕机了,恢复之后可能无法再收到通知,所以支付宝还提供了一个接口“单笔查询接口”-查询单笔交易是否支付成功;
支付这一块有很多异常情况必须考虑:比如防止一笔订单用户多次支付,多次支付后的退款处理等等;
排除常见错误的方法:
1:错误信息提示为:ILLEGAL_SIGN,属于签名验证出错
CreatUrl的方式参数不一致,编码问题都可以引起这个错误
2:错误信息提示为:ILLEGAL_ARGUMENT,属于参数格式有问题
查看接口发送页的参数是不是符合要求
3:错误信息提示为:ILLEGAL_SERVICE,属于无效接口名称
查看service参数
4:错误信息提示为ILLEGAL_PARTNER,属于无效合作伙伴ID
查看partner参数
5:错误信息提示为ILLEGAL_SIGN_TYPE,属于无效签名方式
sign_type是加密类型,一般为md5
6:错误信息提示为DIRECT_PAY_AMOUNT_OUT_OF_RANGE,属于快速付款交易总金额超出最大值限制
快速付款余额支付最大限制为:2000,用卡没限制
7:错误信息提示为HASH_NO_PRIVILEGE,属于没有权限访问该服务
查看service参数和卖家支付宝帐号所拥有的权限是不是一致
8:错误信息提示为DONATE_GREATER_THAN_MAX,属于小额捐赠总金额超出最大值限制
小额捐赠一般现在为100
9:错误信息提示为OUT_TRADE_NO_EXIST,属于外部交易号已经存在
外部交易号重复
10:错误信息提示为TRADE_NOT_EXIST,属于交易不存在
11:错误信息提示为ILLEGAL_PAYMENT_TYPE,属于无效支付类型
查看有没有PAYMENT_TYPE参数,是不是对的
12:错误信息提示为BUYER_NOT_EXIST,属于买家不存在
查看buyer_email的帐号是不是支付宝帐号
13:错误信息提示为SELLER_NOT_EXIST,属于卖家不存在
seller_email的帐号是不是支付宝帐号
14:错误信息提示为BUYER_SELLER_EQUAL,属于买家、卖家是同一帐户
同一个支付宝帐号不能同为买家和卖家
15:错误信息提示为ILLEGAL_LOGISTICS_FORMAT,属于无效物流格式
只有三种物流类型:EMS,POST,EXPRESS,即为EMS,平邮,其他快递
16:错误信息提示为TOTAL_FEE_LESSEQUAL_ZERO,属于交易总金额小于等于0
price或者total_fee不能小于等于0
17:错误信息提示为TOTAL_FEE_OUT_OF_RANGE,属于交易总金额超出范围
18:错误信息提示为ILLEGAL_FEE_PARAM,属于非法交易金额格式
price或者total_fee的值是否规范
1
|
https:
//api.xx.com/receive_notify.htm?total_amount=2.00&buyer_id=2088102116773037&body=大乐透2.1&trade_no=2016071921001003030200089909&refund_fee=0.00¬ify_time=2016-07-19 14:10:49&subject=大乐透2.1&sign_type=RSA2&charset=utf-8¬ify_type=trade_status_sync&out_trade_no=0719141034-6418&gmt_close=2016-07-19 14:10:46&gmt_payment=2016-07-19 14:10:47&trade_status=TRADE_SUCCESS&version=1.0&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&gmt_create=2016-07-19 14:10:44&app_id=2015102700040153&seller_id=2088102119685838¬ify_id=4a91b7a78a503640467525113fb7d8bg8e
|
第一步: 在通知返回参数列表中,除去sign、sign_type两个参数外,凡是通知返回回来的参数皆是待验签的参数。
第二步: 将剩下参数进行url_decode, 然后进行字典排序,组成字符串,得到待签名字符串: