namespace Extend\Payment\Alipay;自己修改都官方sdk信息提交类库Alipay.php,这个类请根据自己实际情况编写
<?php
namespace Extend\Payment\Alipay;
class Alipay{
public static function pay($alipay_config,$args){
/**************************请求参数**************************/
//支付类型
$payment_type = "1";
//必填,不能修改
//服务器异步通知页面路径
$notify_url = $args['notify_url'];
//需http://格式的完整路径,不能加?id=123这类自定义参数
//页面跳转同步通知页面路径
$return_url = $args['return_url'];
//需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/
//商户订单号
$out_trade_no = $args['out_trade_no'];
//商户网站订单系统中唯一订单号,必填
//订单名称
$subject = $args['name'];
//必填
//付款金额
$total_fee = $args['total'];
//必填
//订单描述
$body = $args['content'];
//商品展示地址
$show_url = $args['show_url'];
//需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html
//防钓鱼时间戳
$anti_phishing_key = "";
//若要使用请调用类文件submit中的query_timestamp函数
//客户端的IP地址
$exter_invoke_ip = "";
//非局域网的外网IP地址,如:221.0.0.1
/************************************************************/
//构造要请求的参数数组,无需改动
$parameter = array(
"service" => "create_direct_pay_by_user",
"partner" => trim($alipay_config['partner']),
"seller_email" => trim($alipay_config['seller_email']),
"payment_type" => $payment_type,
"notify_url" => $notify_url,
"return_url" => $return_url,
"out_trade_no" => $out_trade_no,
"subject" => $subject,
"total_fee" => $total_fee,
"body" => $body,
"show_url" => $show_url,
"anti_phishing_key" => $anti_phishing_key,
"exter_invoke_ip" => $exter_invoke_ip,
"_input_charset" => trim(strtolower($alipay_config['input_charset']))
);
//建立请求
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
echo $html_text;
}
}
处理下单提交数据给支付宝的方法首先要先在这个方法的类导入命名空间和引入文件use \Extend\Payment\Alipay as Alipay;//导入命名空间并取Alipay别名
import('Extend.Payment.Alipay.Alipay',$_SERVER['DOCUMENT_ROOT'],'.php');
import('Extend.Payment.Alipay.lib.alipay_notify',$_SERVER['DOCUMENT_ROOT'],'.class.php');
import('Extend.Payment.Alipay.lib.alipay_submit',$_SERVER['DOCUMENT_ROOT'],'.class.php');
对于命名空间有不理解的可以观看《关于PHP命名空间的声明和使用》这篇博文和观看视频。// 提交数据给支付宝,这里都数据参数根据自己修改都官方sdk来传递,根据实际情况为准
$baseurl = 'http://'.$_SERVER['HTTP_HOST'];
$args = array(
'out_trade_no'=>$out_trade_no,// 商户订单号
'notify_url'=>$baseurl.'/index.php/Home/Index/notifyurl.html',// 异步跳转处理
'return_url'=>$baseurl.'/index.php/Home/Index/returnurl.html',// 同步跳转处理
'name'=>$row['name'],// 订单名称
'total'=>$row['price'],// 订单金额
'content'=>'测试描述',// 订单描述
'show_url'=>$baseurl,// 商品展示地址
);
Alipay\Alipay::pay(C('alipay'),$args);//通过命名空间别名调用提交信息都方法并且传入配置信息和提交都信息
信息提交到支付宝之后,当客户进行支付完成都操作,支付宝就会开始回调我们都处理方法,我们可以在设置回调这里改变订单都状态// 同步跳转
public function returnurl(){
$alipay_config = C('alipay');
//计算得出通知验证结果
$alipayNotify = new Alipay\AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyReturn();
if($verify_result) {//验证成功
//商户订单号
$out_trade_no = $_GET['out_trade_no'];
//支付宝交易号
$trade_no = $_GET['trade_no'];
//交易状态
$trade_status = $_GET['trade_status'];
if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
// 下面是处理订单信息都代码,根据$out_trade_no商户订单号获取订单信息然后更改订单状态
$order = M('order');
$row = $order->where(array('number'=>$out_trade_no))->find();
if($row){
if($order->where(array('id'=>$row['id']))->save(array('status'=>1))){
$this->assign('row',$row);
$this->display('buy_success');
}else{
$this->error('错误');
}
}else{
$this->error('错误');
}
}else {
echo "trade_status=".$_GET['trade_status'];
}
echo "验证成功<br />";
}else {
//验证失败
//如要调试,请看alipay_notify.php页面的verifyReturn函数
echo "验证失败";
}
}
notify异步回调// 异步跳转
public function notifyurl(){
$alipay_config = C('alipay');
//计算得出通知验证结果
$alipayNotify = new Alipay\AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if($verify_result) {//验证成功
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
//交易状态
$trade_status = $_POST['trade_status'];
if($_POST['trade_status'] == 'TRADE_FINISHED'||$_POST['trade_status'] == 'TRADE_SUCCESS') {
// 下面是处理订单信息都代码,根据$out_trade_no商户订单号获取订单信息然后更改订单状态
$order = M('order');
$row = $order->where(array('number'=>$out_trade_no))->find();
if($row){
if($order->where(array('id'=>$row['id']))->save(array('status'=>1))){
echo "success";
}else{
echo "fail";
}
}else{
echo "fail";
}
}
echo "success"; //请不要修改或删除
}
else {
//验证失败
echo "fail";
//调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
}
上面代码已经完整了整个支付都功能,大家最好不好直接复制过去就用,这种东西重在理解,大家可以参考我的代码然后再去看看官方的文档,这样下次就算不看文章也都能做出来支付功能了。本站特色就是博文和视频一起来,看不懂博文请看视频。支付宝接口代码.zip( 149.37 KB 下载:44 次 )