thinkphp+支付宝接口功能
1.
打开Submit.php文件,把以下代码去掉;require_once(“alipay_core.function.php”);require_once(“alipay_md5.function.php”);
同样,打开Notify.php文件,把以下两段代码去掉require_once(“alipay_core.function.php”);require_once(“alipay_md5.function.php”);
2.
01. 在配置文件中Conf/Config.php文件中对支付宝相关参数进行配置
\’alipay_config\’=>array(
\’partner\’ =>\’208****73\’, //这里是你在成功申请支付宝接口后获取到的PID;
\’key\’=>\’p3****g48\’,//这里是你在成功申请支付宝接口后获取到的Key
\’sign_type\’=>strtoupper(\’MD5\’),
\’input_charset\’=> strtolower(\’utf-8\’),
\’cacert\’=> getcwd().\’\\cacert.pem\’,
\’transport\’=> \’http\’,
//这里是卖家的支付宝账号,也就是你申请接口时注册的支付宝账号
\’sign_type\’=>\’MD5\’,
),
\’alipay\’ =>array(
//这里是卖家的支付宝账号,也就是你申请接口时注册的支付宝账号
\’seller_email\’=>\’123@qq.com\’,
//这里是异步通知页面url,提交到项目的Pay控制器的notifyurl方法;
\’notify_url\’=>\’http://www.xxx.com/Pay/notifyurl\’,
//这里是页面跳转通知url,提交到项目的Pay控制器的returnurl方法;
\’return_url\’=>\’http://www.xxx.com/Pay/returnurl\’,
//支付成功跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参payed(已支付列表)
\’successpage\’=>\’User/myorder?ordtype=payed\’,
//支付失败跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参unpay(未支付列表)
\’errorpage\’=>\’User/myorder?ordtype=unpay\’,
),
02 .PayController 控制器中定义相关方法
html:
<input onkeyup=”value=value.replace(/[^\d]/g,\’\’) ”
onbeforepaste=”clipboardData.setData(\’text\’,clipboardData.getData(\’text\’).replace(/[^\d]/g,\’\’))”
type=”text” datatype=”*” placeholder=”请输入充值金额” value=”” id=”pay” name=”pay”>
<div onclick=”save();” class=”p-btn”>确认</div>
function save(){
。。。。
$.ajax({
url:”{:U(\’User/payorder\’)}”,
data:{“phone”:phone,”pay”:pay,”hideuid”:hideuid},
type:\’post\’,
success:function (data) {
if(data.success ==1){
layer.alert(data.message+\’点击确定前往支付\’,{icon:6},function () {
window.location.href = Think.U(\’Portal/Pay/chongzhi\’,\’ordernumber=\’+data.newnum);
});
}
}
});
}
UserController:
payorder 方法:保存订单表数据,返回新增的订单号,使ajax 跳转到chongzhi 页面(在该页面中,点击支付,前往topay 支付)
PayController:
// 前往支付 啊
生成订单号 createOrderNo ,返回 2017052300001 00001 同一天,根据number(即订单数,无论订单下几个参会人) +1即可(同样适用于一个订单下多人参与)
锁就是数据库锁,最常见的体现就是事务。查询对象时需要防止同时操作的话也需要加锁
lock lock
支付宝服务器异步通知页面方法
(同步接口)支付成功后 跳转回该页面
充值后修改状态:
finishchongzhi
总结:
1.把执行支付操作(toalipay),处理异步返回结果(notifyurl_phone),处理跳转返回结果(returnurl_phone)三个支付接口的核心页面写到一个PayAction控制器中。
2.提交支付的页面中,可以在提交之前先把一些参数要传递的内容先通过隐藏域的方法组合好,比如金额先计算好,订单名称,订单描述等先用字符串组合好。然后提交表单,这样,在toalipay方法中只要直接构造传递参数,直接进行提交就行了。
3.支付返回后的处理因为要在异步和跳转两个方法中都要进行相应的判断和处理,所以,把这些判断和处理写到一个自定义函数中,这样只要调用函数即可,使得代码更加清晰明了。
4.notify_url和return_url两种模式的返回url必须使用http://xxxxxxx这样的绝对路径,因为里是从支付宝平台返回到你的项目页面,不能使用相对路径。