支付宝支付的接入
网站的底层最基础的业务之一,就是收付款。在H5网站里面,支付宝还是非常好用。首先注册企业支付宝(要准备相关资料),
支付宝的支付框架已经升级,在之前版本用v2居多。在新版本https://opendoc.alipay.com/open-v3/053sd1 里面更加容易接入到系统里面。
-
PC网页支付的申请与配置 (在支付宝页面扫码支付)
点击支付,跳转到支付宝官网,然后扫一扫完成支付。相关配置说明:提供网站地址,网站能正常访问且页面显示完整,网站需要明确经营内容且有完整的商品信息。
网站必须通过 ICP 备案,且备案主体需与支付宝账号主体一致。若网站备案主体与当前账号主体不同时需上传授权函。
如以个人账号申请,需提供营业执照,且支付宝账号名称需与营业执照主体一致
-
创建一个网页端应用APP
这里把全部的支付看成一个小应用。生成应用之后,需要去配置相关信息。
配置流程:
接口加签方式(密钥/证书) :- 加签方式:选择“密钥”。
- 加签算法:选择 ”RSA2“。
- 点击“生成密钥”。
- 复制“应用公钥”字符串,需要在第3步中上传
备注:此处加密需要密钥生成软件。生成密钥复制到。公钥生成的逻辑。下载公钥和私钥生成软件(支付宝官方提供的),主要根据RSA2加密生成一个公钥和私钥串。将公钥上传到支付宝,会再进行一次运算,传回公钥。
-
应用网关和白名单配置
应用网关主要是指支付成功后的回调接口(由支付宝官方发起通知)
白名单主要是指能发起支付参数请求服务器的IP设置(确保密钥被泄露也不担心权限问题)配置好了之后,支付宝的PC端发起整个业务逻辑流程:
1.根据前端用户提交的订单数据,生成订单号和金额相关信息
2.打开WEB请求网关
3.跳转支付宝付款页面(PC和手机网站流程基本一样)
4.付款成功之后,跳回我们设定的新页面4.支付宝支付功能开发相关逻辑注意点:
1.一般都是直接使用前面开发好的插件,如果自己从0开始接,要跑通的测试和回调调试工作量挺大。
2.开发的时候需要配置的相关参数:(标准的严格身份确定流程理解)
appid 项目的识别标记 (支付宝对每个申请的支付项目都进行编号)
应用公钥和私钥 (公钥的作用是给支付宝发送请求,私钥的作用是验证公钥发过来的数据是否正确)
支付宝的公钥(支付宝服务器确定我们服务器身份的钥匙)
也就是通讯流程,我们先向服务器发送公钥确认身份,支付宝也用我们配置的公钥给我们服务器发送消息通知,确保其他来源信息无法伪造。也就是需要配置俩个公钥和一个自己的私钥验证身份。
3.请求数据是需要对身份和数据的合法性进行校验,再完成其他订单关联逻辑,最后发起支付宝的支付逻辑
再回调接口完成。其中回调的时候,需要对数据进行解密,然后再校验订单逻辑
将付款订单状态进行变更成已经付款,回调通知是有三次失败通知的。 4.由于订单的数量数据比较关键,一般都会保留日志,所以日志记录对支付而言是非常重要的。
5.thinkphp框架的日志方法示例(主要记住对应数据)
\think\Log::record(“回调请求参数解析错误”, “error”);
由于回调的数据是基本无法模拟请求的(主要是被加密了),只能依赖日志相关功能。日志在被请求之后。是保存在runtime/log里面。
回调相关数据分析:[{ "app_id":"2021033333", //回调的相关信息,我们上面的申请appid "auth_app_id":"20210333333", "buyer_id":"2088102", //买家的用户id "buyer_logon_id":"57***@qq.com", //登录邮箱 "buyer_pay_amount":"0.01", //付款金额 "charset":"utf-8", "fund_bill_list":"[{\"amount\":\"0.01\",\"fundChannel\":\"ALIPAYACCOUNT\"}]", //账单信息 "gmt_create":"2024-08-15 22:02:31", //订单创建时间 "gmt_payment":"2024-08-15 22:02:32", "invoice_amount":"0.01", //付款金额 "notify_id":"2024081501222220232047121437948757", //付款通知 "notify_time":"2024-08-15 22:02:33", "notify_type":"trade_status_sync", "out_trade_no":"20240815220210102950", //这个是我们平台自己生的订单号 "point_amount":"0.00", //积分豆蔻 "receipt_amount":"0.01", //金额 "seller_email":"jint4@qq.com", //邮箱 "seller_id":"2021384532", //卖家id "sign":"Ee8qSb0PpzKTcXGz0sW7A8oqrcaVKieOYp2xtb9bqDiydRLYR0/bq/WjSbkB5GEWo44De3/J6J+eD4U4A+dzfxpl6Qivv9GCOywbBm4gKbQlfsIgHD256q6xFQAWpvJ2Csy7xUu3e97ul3vkBx1oO024nYljP0gFCyQD0ht3/8iBaydA2NgttVxAzZRz6ieuzzF+BsqU8puhGTtG9d1PZzszrmFByJScg3oiWHk8XIjMd/Ce2UHVurKCowJGEE9cvylb8rG9Wb/R0wL/UYuBTUnE/XMbRnvGb38nbC10F4pSNFFMGp6BrlyN6pACr9rfXzm1xPQ4sU33OuCydcWagw==", //签名 通过密钥签名算法进行的签名,此处我们直接使用官方Skd即可 "sign_type":"RSA2", "subject":"淘", "total_amount":"0.01", "trade_no":"202408152200144712142", "trade_status":"TRADE_SUCCESS", //交易成功说明 "version":"1.0"},]
可以看到回调的参数非常多,签名与我们本地的appid 参数id 即可完成alipay的数据解码对接。