原文链接
1、介绍
支付宝国内乃至全球都是数一数二的大型的第三方支付平台。其提供了一些接口给用户/商家进行收款。
官网:http://b.alipay.com(建议使用IE打开)
接口类型的介绍:
淘宝模式的担保交易接口:付款-发货-收货-确认-支付宝打款【从2016年8月份不对外开放申请】
即时到帐接口:付款之后立即进入卖家账户-发货-确认
以后一般遇到的支付接口都是即时到帐的接口。
2、签约流程(了解)
①打开http://b.alipay.com网站
②选择对应的接口应用平台类型
③签约准备页面,阅读下申请条件或者使用场景(申请须知)
④资料确认准备齐全就可以点击右下角的立即接入
⑤提交资料,如果之前没有提交接口申请,则会在红色矩形位置显示“补充资料”,点击之后补全资料即可,审核时间一个工作日
⑥申请完成通过之后,会收到来自支付宝的短信和邮件,然后可以登录支付宝查看接口信息
点击“查看pid和key”按钮
支付宝接口信息
合作伙伴身份:2088102642669732
合作伙伴密钥:vas73sltf21q19wv7yltvtsa2612liix
3、SDK的下载与配置
SDK:软件开发工具包(Software Development Kit),通俗的来讲SDK其实就是一个demo案例。
①在帮助中心下载sdk
②解压sdk压缩包
根据密钥的类型选择对应的签名版本的SDK
根据网站自身的编码格式选择对应的版本,如果不一致,则后期会报错:
最终的结构:
Img目录:图片存储的目录;
Lib目录:存储的是接口需要的类和方法的封装文件;
Alipay.confg.php:接口配置文件;
Alipayapi.php:接口请求发送文件;
Cacert.pem:RSA签名版本的支付宝公钥证书;
Index.php:demo的入口文件;
Log.txt:日志输出文件(不能删除);
Notify_url.php:通知页面(支付宝→服务器发送的异步post请求,用于告知支付结果);
Return_url.php:通知页面(支付成功之后的跳转页面,get请求,虽然也包含了请求结果,但是不可信);
③由于都是php文件,则需要将其放到站点中才能看到效果,因此复制到站点中
④通过浏览器访问
⑤配置接口
修改配置文件:alipay.confg.php
其中要求notify_url地址必须是外网可以访问的。
稍后会把代码传到线上服务器,修改notify_url.php中的测试代码,将结果打印输出到log.txt中
如果后期需要修改数据库中的订单状态也可以在notify_url中进行修改。
附异步请求返回的数据:
{
"discount": "0.00",
"payment_type": "1",
"subject": "test商品123",
"trade_no": "2017052321001004890265177366",
"buyer_email": "578931944@qq.com",
"gmt_create": "2017-05-23 11:01:42",
"notify_type": "trade_status_sync",
"quantity": "1",
"out_trade_no": "test20170523110102",
"seller_id": "2088102642669732",
"notify_time": "2017-05-23 11:01:47",
"body": "到账测试",
"trade_status": "TRADE_SUCCESS",
"is_total_fee_adjust": "N",
"total_fee": "0.01",
"gmt_payment": "2017-05-23 11:01:47",
"seller_email": "cherish@cherish.pw",
"price": "0.01",
"buyer_id": "2088902332344899",
"notify_id": "1d92986cb058bb2bc38d3a557098eadmva",
"use_coupon": "N",
"sign_type": "MD5",
"sign": "0ca577f57e1fcd3afc4f6eb73c3ad350"
}
支付宝交易流程图:
4、支付接口集成
①分析demo入口文件index.php
其中只是收集到数据之后以post方式进行提交,提交给alipayapi.php页面
在当前的项目中如果收集到对应的数据然后提交给alipayapi.php的话则可以实现支付
解决方法:
①curl方法 【不建议使用curl,不能跳转】;
②PRG模式 全称:Post-Redirect-Get
扩展:PRG模式的使用场景
A,支付的时候会使用;
B,防止表单重复提交;
②使用PRG模式执行支付
PRG其实就是html+js代码实现的
简化后的html的form代码
<form action='alipayapi.php' name='alipayform' method='post' >
<input type='text' name='WIDout_trade_no'>
<input type='text' name='WIDsubject' value='test商品123'>
<input type='text' name='WIDtotal_fee' value='0.01'>
<input type='text' name='WIDbody' value='即时到账测试'>
</form>
为了保证字符集的统一,建议在入口文件中添加字符集的声明:
③测试支付
在支付成功之后需要在异步通知页面中根据post中的订单编号查询到对应的记录然后进行订单状态的修改。