这两天在公司做一个WEB小项目,需要有支付功能。第一次支付宝付款,踩了个小坑,还算顺利。激动之余,赶紧写下了实现过程。第一步当然是在支付宝开放平台申请公钥和私钥APPID。支付宝的官方文档有详细的介绍,这里就不赘述了。应用完成后,下面将开始开发者的实现过程。首先是下载支付宝的官方DEMO,网址是https://docs.open.alipay.com/...建议下载官方DEMO,不要下载SDK,因为对于新手来说,里面有封装好的函数可以直接使用的DEMO改一下就可以用了,比较友好。等技术进步了,再玩玩SDK。因为我是PHPer,当然选择PHP版。下载后默认名称为alipay.trade.page.pay-PHP-UTF-8,建议改名为alipay。因为我是用TP5开发的,所以放在项目根目录下的外部资源包vendor目录下。放入后在alipay目录下找到pagepay目录下的pagepay.php文件。这是阿里官方提供的支付方式示例。跟网上学长学的改成TP5的方法。见下图:顺利走到这里,会出现支付宝二维码页面。这里不能截图,因为客户重新申请了权限。就是支付宝二维码的页面。扫码支付,跳转到支付成功页面,最后跳转到您自定义的同步跳转地址。可以从前端表单传递价格。这里需要填写三个必填项:订单号、订单名称、支付金额。这三项缺少任何一项都会报错。刚开始晕,把订单名去掉,结果报错。。。写到这里后,去config.php配置各种参数。config.php在支付宝根目录下,配置这一项很重要。重要的。如果填错了,商户收不到款……这里是傻瓜式填写方式,应用ID,私钥,异步地址,同步地址,公钥。这6项必须正确填写。因为我用的是TP5,所以通知地址改成了TP5,模块/控制器/方法。请勿在支付宝网关中更改。如果是沙盒环境,需要改成“https://openapi.alipaydev.com/gateway.do”多了一个“dev”,因为我是在真实环境中,所以不需要更改。这里先说一下异步地址和同步地址。新手肯定不知道是什么,可以略过。支付宝支付成功后,会执行这两个方法,系统会将你的支付信息通过POST异步发送给你的方法。因为它是异步的,所以页面不会改变。所谓“不开枪,悄悄进村……”你可以在异步方法中写自己的业务逻辑。例如,接收值,将它们存储在数据库中,等等。这里有一个很大的坑,让我卡了两天,就是异步方法中不能使用session获取值。本来想用session获取用户登录id存入数据库。后来问了高手才知道,异步就是server跟server交互,所以没有cookieId,没有cookieId当然也没有session值。这里不懂的童鞋可以复习一下session的基础知识。惭愧,这么基础的东西我居然忘记了。。。由此可见,同步方式可以走session,因为它是服务端和客户端的交互。如果你对此没有概念,你可以在异步方法接收到参数后将其转换成JSON格式,然后使用file_put_contents()函数写入到记事本中看看。示例:{"gmt_create":"xxxxxxxx",//订单创建时间"charset":"UTF-8","gmt_payment":"xxxxxxxx",//支付时间"notify_time":"xxxxx",//异步回调时间"subject":"XXXXX",//订单名称"sign":"xxxxxxxxxxxxxxxxxxxxx","buyer_id":"xxxxxxxx","invoice_amount":"xxxxx","version":"1.0","notify_id":"xxxxxxxxx","fund_bill_list":"[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]","notify_type":"trade_status_sync","out_trade_no":"xxxxxxxx",//订单号"total_amount":"0.01","trade_status":"TRADE_SUCCESS",//success表示支付成功,商户将收到款项"trade_no":"xxxxxx",//支付宝流水号"auth_app_id":"xxxxxxxx","re??ceipt_amount":"0.01","point_amount":"0.00","app_id":"xxxxxxxxx","buyer_pay_amount":"0.01","sign_type":"RSA2","seller_id":"xxxxxxxxxxxx"}Everythingisimportanttome注释已添加,其他不明白的参数可以参考官方文档。同步方式,顾名思义就是页面同步跳转的地址,也就是客户能看到的页面。这里可以自定义,比如提示用户支付成功。下面是异步和同步方法的例子:/**异步和同步例子*/classAlipayextendsController{/***异步方法*@return[void]*/publicfunctionnotify(){$post=input();if($post['trade_status']=="TRADE_SUCCESS"){//操作数据库修改状态echo"SUCCESS";//成功返回支付宝,不返回此字符,支付宝会定时回调此方法Time51030/m1houruntilsuccess}//写在文中,看参数$data=json_encode($post);file_put_contents("alipaytext.txt",$data);}/***同步方式*@return[type][description]*/publicfunctionreturnfy(){//同步跳转地址return$this->fetch();}}这里重要的是判断异步方法中的trade_status字段。如果等于“TRADE_SUCCESS”,则支付成功。之后回显必须返回一个“SUCCESS”,否则支付宝会认为你支付不成功,并在24小时内定时回调该方法。实际的业务逻辑根据你的需要,比如存入订单表等,当然没那么简单,最好加上一些验证。为了安全。以下是前台代码示例:{includefile="public/header"}
订单名称:
支付金额:
产品描述:
/>
