支付宝支付之从前台打通到后台(二)
来源:互联网 发布:韩顺平javascript 编辑:程序博客网 时间:2024/05/20 21:45
上一篇我们说到客户端在支付的时候,首先得拿着自己的支付信息去后台拿支付签名,然后通过客户端的PayTask来完成支付,虽然这些步骤看起来都挺简单的,然而,这都只是对客户端而言,对于服务端来说,要做很多很多。
今天我们可能都是在讲服务端是怎么操作的,因为客户端就是上一篇说的那些了,你只要获取签名和支付,其他的什么都不要你干,所以,客户端开发的就不要骂后端的接口是怎么回事了,混口饭的都不容易。
从支付宝文档来看,我们在客户端发起支付的时候,首先要去服务端拿签名好的信息,在这个签名的过程中,我们设置了一个异步回调的地址,如下
$request->setNotifyUrl("商户外网可以访问的异步地址");
这个回调也是按照支付宝的文档请求来的,客户端支付成功需要通过异步通知来告知服务器结果,而这个回调是支付去请求的,无需用户去手动求情,这个地址需要是一个外网的地址,以确保支付宝能访问的到(本地localhost当然是不行的啦,这一步必须在服务端去完成,不然,支付宝找不到你的地址),支付宝只有在支付成功的时候才会去回调这个地址,然后支付宝会带着你客户端支付成功的信息去异步回调地址去验签,这个过程就是为了安全起见,如果验签成功,我们可以在成功的时候做一些处理,比如,更改服务端存储的订单状态、获取支付的用户等等
我们来看看异步通知的代码。
$aop = new AopClient;$aop->alipayrsaPublicKey = '支付宝的公钥';$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
代码并不多,但是却是非常的好用,上面需要填写支付宝的公钥,并不是我们用工具生成的那个公钥哦,我这里使用的是沙箱的环境,查看红色箭头的那个支付宝公钥,设置到上面的代码处。
这个时候,我们还需要做一些事情,我们在支付成功后,支付宝调用这个地址,可是我们不知道支付宝是什么时候调用的,我们首先来测试一下,看看支付宝到底返回了些啥,我们把代码重新增加一点,如下。
$myfile = fopen("testfile.txt", "w");$aop = new AopClient;$aop->alipayrsaPublicKey = '支付宝的公钥';$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");if($flag){fwrite($myfile, "true");}else{fwrite($myfile, "false");}if(!empty($_POST))fwrite($myfile, json_encode($_POST));fclose($myfile);
我们在支付成功后,让后台把支付宝请求的信息存储到文件里面,这时候我们来请求一下看看文件里面是啥。
true{ "total_amount": "10.00", "buyer_id": "2088102170452295", "trade_no": "2017041521001004290200139873", "body": "\u661f\u5e01\u5145\u503c", "notify_time": "2017-04-15 21:33:46", "subject": "\u661f\u5e01\u5145\u503c", "sign_type": "RSA2", "buyer_logon_id": "pgp***@sandbox.com", "auth_app_id": "2016180300158116", "charset": "UTF-8", "notify_type": "trade_status_sync", "invoice_amount": "10.00", "out_trade_no": "G415630134174627", "trade_status": "TRADE_SUCCESS", "gmt_payment": "2017-04-15 21:33:45", "version": "1.0", "point_amount": "0.00", "sign": "LNKrpemGTJ4Byyk5ZKIFBDms8tnrFzanKVNSSFUMFBNXi8tacKAtb0BdM5L63Fp+YCK9Krz4zeuigG2MVlQufSygemACOx1AJKW8w8NgIy5738NepepheBBItMWJw8rr3mPA3nHqD\/4BEC+0uhTyqENSiBbz2yv7\/5qg6TLFqtWqQFEefgPCDG4wM0\/dh3HA8XGjbau7\/3Q1zePbYU2lbqqcZW9DR7XwmAp3JIufrHKWJ88XRR+YwQX2033sh9bf9WysEq4gOqpMexViHcNcC2LrPWlusbdcaHECnX8T+qIUlPLZaU84ZM6fyqPGfoz5S1\/bupMQfblJgd0YRIJdTQ==", "gmt_create": "2017-04-15 21:33:44", "buyer_pay_amount": "10.00", "receipt_amount": "10.00", "fund_bill_list": "[{\"amount\":\"10.00\",\"fundChannel\":\"ALIPAYACCOUNT\"}]", "app_id": "2016080300158116", "seller_id": "2088102169776678", "notify_id": "334bb5366412b8531a69d356d2786fdi8m", "seller_email": "talpdi4684@sandbox.com"}
可以看到,文件中返回的flag是true,就说明这个请求验签是正确的。并且支付宝请求这个异步链接的时候是通过post把数据带过来,然后验证,这个时候,我们可以在$flag验证为true的情况下做一些服务端想存储的一些信息,如上是所有POST的信息了。
这时候,我们几乎完成整个流程了,我们再把思路理一理,加上一些数据的存储操作,我们在获取签名的时候,我们可以把用户支付的信息存储在数据库表里面,比如订单号,订单价格,订单状态,订单时间等等,然后再返回给用户签名信息,用户在支付成功的时候,支付宝开始异步回调,我们在异步回调的地址中进行验签,如果验签成功,我们拿着订单号去数据库表里面去找原来的那条订单信息,并更新订单状态为已支付。
整体就这么多了
- 支付宝支付之从前台打通到后台(二)
- 支付宝支付之从前台打通到后台
- 从前台传对象到后台(springmvc)问题
- springmvc值的传递(从前台到后台)
- Android 从前台切换到后台
- json从前台到后台传递
- Thinphp从前台到后台-1
- ThinkPHP之支付宝网页支付(即时到账)
- 支付宝APP支付之Java后台生成签名具体步骤
- new97架构下单表操作从前台到后台全过程
- 原始servlet+hibernate+struts2,从前台到后台的整个过程
- 从前台(easyui)传多个对象到后台(jsp)
- 支付宝APP支付(Java后台生成签名具体步骤)
- 支付宝APP支付(Java后台生成签名具体步骤)
- mycncart 之支付宝即时到帐支付方式
- Android支付之支付宝支付(一)
- 移动支付之支付宝支付
- 第三方支付之支付宝支付
- mysql常用语句
- Windows多媒体定时器(精确到1ms) (二)
- mysql主从配置
- POJ2524 Ubiquitous Religions (并查集)
- struts2基础学习收录重点之OGNL动态配置result , 使用注解配置action,实现java国际化
- 支付宝支付之从前台打通到后台(二)
- java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting ‘name pattern’
- dp---跳跃游戏
- vim配置
- [JZOJ5060]公路建设
- QComboBox下拉框 + 颜色相关
- 无等待地从一个消息队列中取得消息, OSQAccept()
- the diary for one command application of pipe in Linux
- C++:类和对象