支付宝商家二维码收款、订单状态查询、退款API试用笔记

情景

商家的app或商城支持支付宝支付,支付的方式是商家根据商品价格生成相应的付款二维码,用户扫码付款,同时商家需要查看支付订单状态,备货出货,当然还要支持退款。

准备测试环境

1、开通开发者服务

用自己的支付宝账号登录蚂蚁金服的开放平台,同意相关协议和实名认证后,进入到开发者中心,支付宝为开发者提供了沙箱应用,用于测试支付宝开放的相关API。
沙箱应用

2、添加沙箱应用公钥

生成公钥的方法:https://docs.open.alipay.com/291/105971
公钥

注意:如果我们用的不是java语言来请求支付宝API,生成公钥的时候需勾选PKCS1

复制生成的公钥到自己的沙箱应用公钥中即可。

3、安装支付宝沙箱版

在开发者的沙箱应用页面可以扫码下载
沙箱版

测试二维码收款API

官方文档

https://docs.open.alipay.com/api_1/alipay.trade.precreate/

1、根据API文档拼接请求必要参数(sign除外)

各个参数之间用&连接,我们需要根据这参数生成sign

app_id=2016091900543763&method=alipay.trade.precreate&charset=utf-8&sign_type=RSA2&timestamp=2014-07-24 03:07:50&version=1.0&biz_content={'out_trade_no': '007', 'subject': 'test', 'total_amount': 99.99, 'discountable_amount': 1}
2、生成sign

复制上面拼接的请求参数到支付宝提供的生成公钥工具中生成sign
sign

注:应用私钥是准备环境中生成的私钥,签名方式勾选RSA2,字符集UTF-8

把签名(sign)的内容进行UrlEncode,并统一编码为utf-8
urlencode

点击UrlEncode按钮生成encode后值,我们下面步骤会用到该值拼接url
urlencode

3、拼接收款二维码API的url

下面用python代码展示

# 开发者中心中沙箱应用里的支付宝网关
baseurl = "https://openapi.alipaydev.com/gateway.do"

# 请求的参数
args = """app_id=2016091900543763&method=alipay.trade.precreate&charset=utf-8&
          sign_type=RSA2&timestamp=2014-07-24 03:07:50&version=1.0&
          biz_content={'out_trade_no': '007', 'subject': 'test', 'total_amount': 99.99, 'discountable_amount': 1}"""

# urlencode后的sign值
sign = """OCnkO%2bxu%2f8X0cIzA7FhNN439LjfYClSD4HtZ4aGLEwthem540NPHldM259caDq1RNl9OUl3Tt56OsRKrS3733NNokG
wdH1YWcgk%2fMzzyJVlNLxnpWWhHTq%2bhS%2bIqzBwbLhkzmek5u076w7Q1ZFqO1s3gLE85eyQKh4l037Ft2EP8tZJHMn6%2
bE6%2bXnCTjzqL9IF2l5Pb1tYTc6A3jXVkBC9xR4wMboXB97kvFO9vprw9BMmE7ndri2EU9zM6t2sAwE0accMuAkxnEIMoR0%
2fmU15ytFzmOeOsX4l2YagdcgJbE1iCY5zq1tMvyjoThQ5km6iKSAsXd4oUeG%2br0LVm1nA%3d%3d"""

# 请求生成二维码api的url
url = baseurl + "?%s&sign=%s" %(args, sign)
4、请求支付宝收款二维码API

请求api我用的是python的requests

pip install requests

import requests

# url是第3步中拼接的url
r = requests.get(url)

# 查看返回值,其中 qr_code 便是我们需要生成二维码的url了
r.json()
{u'alipay_trade_precreate_response': {u'code': u'10000',
  u'msg': u'Success',
  u'out_trade_no': u'007',
  u'qr_code': u'https://qr.alipay.com/bax05948btagtld9eolk0089'},
 u'sign': u'fHmU9iU8evm+HsVSqt5OHThBv7HghIe+nE5/b9+ddLqQuUn2zGJb7xVCwKKoad42LGE+jaC8yp+piy5/kOnde+eR0TiGoic4J0gfajNdXEE4WyrnrkHm2Pxb2xjAcqxCq4sB/k/SPBBndYITkDuXjo1uQlIW2bvQclW5wEqacYqxseahSU/jd/t/y4XCq1ZiUhdm5bUMN9i9lCGl+QqKUc54CFIxjFXoH5Gfnbarx27OekeXA4slIx9iotkKv1NSLfeopWZQozpN5lzzRRkZCiefq5h+UgcgIqNakqyafS/MwH708XxjtnItLoxnQYxlg48JBwHjuPWe3ITE+6wDpA=='}
5、根据qr_code生成二维码

我们可以到在线生成二维码的网站,根据qr_code值生成二维码,便可打开沙箱版支付宝扫码支付了。
支付

查询支付订单状态

官方文档

https://docs.open.alipay.com/api_1/alipay.trade.query/

同理,跟前面的生成收款二维码一样,我们根据查询订单状态文档拼接必要的请求参数(sign除外),用支付宝提供的工具生成sign并进行UrlEncode,拼接查询支付订单API的url,最后我们看看查询的url和返回的值,各返回值代表什么文档也有说明。

# 查询订单的url
search_url = """https://openapi.alipaydev.com/gateway.do?
                app_id=2016091900543763&method=alipay.trade.query&
                charset=utf-8&sign_type=RSA2&timestamp=2014-07-24 03:07:50&
                version=1.0&biz_content={'out_trade_no': '007'}&
                sign=QKhnUjGE22Ro814xfqCXe84XJ%2fkQQ0WvvfvpMSLvMzTzlTvTlX1xPQvTrGPP4
                PHr70znr5jnP%2b8uA5hpLITcnJrz%2fy2f3T70T%2f6CTy5jyX6J91I3
                8%2b%2bigMGOfV8HXBAUtC9cBdoFMKMwVp9Nl04nS93Y%2fm50JmlJkjO1P
                46iHEMOh7EH3IOPBV6qjD5ZZlbr0thybW7EAIo0xeTOuHhjv4eO2orsj7SF
                dl09fDM7%2bNuNLAUzmNQtuWr4iP57jm2qzS03qcJInn7k0MlEMTHx%2f%2bw%3d%3d"""

# 返回的值
{u'alipay_trade_query_response': {u'buyer_logon_id': u'ofv***@sandbox.com',
  u'buyer_pay_amount': u'99.99',
  u'buyer_user_id': u'2088102176403293',
  u'buyer_user_type': u'PRIVATE',
  u'code': u'10000',
  u'fund_bill_list': [{u'amount': u'99.99',
    u'fund_channel': u'ALIPAYACCOUNT'}],
  u'invoice_amount': u'99.99',
  u'msg': u'Success',
  u'out_trade_no': u'007',
  u'point_amount': u'0.00',
  u'receipt_amount': u'99.99',
  u'send_pay_date': u'2018-08-14 11:26:25',
  u'total_amount': u'99.99',
  u'trade_no': u'2018081421001004290200513089',
  u'trade_status': u'TRADE_SUCCESS'},
 u'sign': u'Fj2jkldmVRdVJJzS2aod9johl3nKyTdPgadOFduDXqe6SEIaVnFy7jggvaSdl4v/EfPM3bEsx2COe7PyfI42IIJEISE/nI+qvmkjnyXsZgc8ru23i7zwPnsgutAlRIXJc1egR4gGKP0nadFM9LYb9eQojVulhUndxbxyQlYLF/M+3gwciw7+/3RsG4r6M8znGLHcAShlm6cQ9t1Jd3Oz3iO1O2PoY7FArbD8yIRFaYpDLPrGU8obCU0T6vxuPzRU010Rsq5xDM12nSeZKnXiyqAr0SBDxyh1WRRDYFL3YqBW4OpyJldSwLxKvYyWiSwlnI2BXlyEWsgdtu7CW+qlmg=='}
退款

官方文档

https://docs.open.alipay.com/api_1/alipay.trade.refund/

同理,跟前面的生成收款二维码一样,我们根据退款文档拼接必要的请求参数(sign除外),用支付宝提供的工具生成sign并进行UrlEncode,拼接退款API的url,最后我们看看退款的rul和返回的值,各返回值代表什么文档也有说明。

# 退款请求的url
refund_url = """https://openapi.alipaydev.com/gateway.do?
                app_id=2016091900543763&method=alipay.trade.refund&
                biz_content={'out_trade_no': '123', 'refund_amount': 99.99}&
                sign=Dj61O7%2faQJYjblQRF%2fMbDWrkSbuO3DrIgJArV7qsIUf%2ftyd7FSmudzzd
                SNP3wlXO06QGtPgkxL2mk2kD85LdZEPPKU%2botVZXF5%2flPTZQwFfwDzrt
                V17pTtyY8wlxbbyLiksqtuOL2GdfyrXU7hdp1ggg58mQNH3%2f2Ods1o8Dh
                eME1m11p1FKwVGLasQCJ8dcl1LSq8kmir0h8awReWFAVXYZpybHo5TlK004
                GChVNrRYaBSf78BupCoEeiemmWJZsf6uf5OzpG4dzFvAB4UVyX68T%2fYDQ%3d%3d"""

# 请求api后的返回值
{u'alipay_trade_refund_response': {u'buyer_logon_id': u'ofv***@sandbox.com',
  u'buyer_user_id': u'2088102176403293',
  u'code': u'10000',
  u'fund_change': u'Y',
  u'gmt_refund_pay': u'2018-08-14 14:06:32',
  u'msg': u'Success',
  u'out_trade_no': u'007',
  u'refund_detail_item_list': [{u'amount': u'99.99',
    u'fund_channel': u'ALIPAYACCOUNT'}],
  u'refund_fee': u'99.99',
  u'send_back_fee': u'99.99',
  u'trade_no': u'2018081421001004290200513089'},
 u'sign': u'o6bezBgdQHx/3VNvDwWJ5IEEAc8OsJWGC9xaKPdLjEK85PYpJfKbX3JS4UM5wi7P2WS1rpOrb1yTnrFieVr0QwNuSOw4uOHTLH/2whMhVm/zd9s0meCw0625GVpRI7Henk1hdxz9QdtXDKN6/kNItgApPX/dKjqoZCKKCB6oD2C7Ng0H09WQp6FBajI28qWK7qDqAL7XGRiX++qYPrvy3x95AP3q/GiPAERvuuvi1X3R4CdEB8f3VCmgTKFYigwD8MPmAnpHRbYl+MCRGaTOGUmBpD9FsswxkOdJGMJaG2BsBXYdUEuQNDuflJkKrAq2fEi5IrYktDZIexm9LKo/dw=='}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值