1 开发前的准备
1.1 密钥的的生成
先去官网下载支付宝平台助手,下载地址:小程序文档 - 支付宝文档中心 ,下载并安装平台助手,使用平台助手生成应用公钥
和应用私钥
。
1.2 创建应用配置账号信息
沙箱账号申请地址:登录 - 支付宝
正式账号申请地址:登录 - 支付宝
为了保证交易双方(商户和支付宝)的身份和数据安全,开发者在调用接口前,需要配置双方密钥,对交易数据进行双方校验。密钥包含应用私钥(APP_PRIVATE_KEY)
和应用公钥(APP_PUBLIC_KEY)
。生成密钥后,开发者需要在开放平台开发者中心进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)
应用在代码中,对请求内容进行签名。
注意:当设置了应用公钥后,才可以查看支付宝公钥
1.3 开发需要的参数
-
appid
: 应用ID -
private_key
:由支付宝开发平台助手生成的应用私钥 -
alipay_public_key
:是支付宝公钥,支付宝开发平台助手生成的应用公钥这里特别需要注意的是
alipay_public_key
是蚂蚁金服开放平台获取的支付宝公钥,不是本地平台助手申请的应用公钥
,不要弄错了,否则会签名失败
2 支付介绍
2.1 支付逻辑
-
用户在商户系统下单
-
商户系统调用支付宝的支付接口,发起支付请求
-
用户登录,选择支付渠道,输入支付密码
-
支付宝get请求
returnUrl
, 返回同步通知参数 -
支付宝post请求
notifyUrl
,返回异步通知参数 -
商户可以通过 交易查询接口查询交易状态
-
如果用户或者商户想退款,可以发起退款请求
-
如果退款可以调用退款查询接口,查询退款信息
-
下载对账单
2.2 关于支付宝中同步通知和异步通知的理解
在调用支付宝接口的时候,确认支付以后我们需要请求两个通知接口:同步通知(returnUrl
)和异步通知(notifyUrl
)。刚开始看文档的时候也不是很清楚这两个接口有什么区别,从流程图里面描述到的是,同步通知(returnUrl
)是GET请求,“支付是否成功以异步通知为准”。异步通知(notifyUrl
)是POST请求,但是图里面还是说了一句“支付是否成功以查询接口返回为准”。所以最终支付是否成功还是要看查询接口的返回结果,那同步通知和异步通知有什么用呢?
个人的理解是:只要同步通知和异步通知返回成功一般情况下其实已经可以认为支付成功了,我们就已经可以进行下一步的操作了。同步通知用于前端界面及时反馈给用户,告诉用户支付操作已经完成,然后让前端页面跳转的需要跳转的页面;异步通知用于后台业务逻辑的处理。当然为了保险,后面最好还是调用查询接口,对支付账单进行核对。
需要注意的问题:
returnUrl
和returnUrl
这两个的接口地址必须放在公网上,需要外网能访问到,否则支付宝是调不到这两个接口的。本地测试可以使用 natapp 做内外网穿透。- 经过测试异步通知和同步通知没有很明确的先后顺序,同步通知并不一定在异步通知之前被调用。
2.3 重点看官方的Demo
其实官方的Demo已经写的很详细了,每个接口的调用已经给出了详细的演示。所以后面的代码基本也是照着官方的Demo来的。