1.php
打开Submit.php文件,把如下代码去掉;require_once("alipay_core.function.php");require_once("alipay_md5.function.php");html
一样,打开Notify.php文件,把如下两段代码去掉require_once("alipay_core.function.php");require_once("alipay_md5.function.php");ajax
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 控制器中定义相关方法ide
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"> post
<div onclick="save();" class="p-btn">确认</div>ui
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这样的绝对路径,由于里是从支付宝平台返回到你的项目页面,不能使用相对路径。