thinkphp3.1.3整合支付宝

最后更新于:2022-04-01 23:49:20

> ## thinkphp3.1.3整合支付宝 第一步:引入官方封装的支付库命名:alipay放到thinkPHP的Vendor第三方类库文件里 第二步:在配置文件中添加支付配置 1. 引入官方封装的支付库命名:alipay放到thinkPHP的Vendor第三方类库文件里 2. 在配置文件中添加支付配置 ~~~ 'alipay_config'=>array( 'partner' =>xxx, //这里是你在成功申请支付宝接口后获取到的PID; 'key'=>xxx,//这里是你在成功申请支付宝接口后获取到的Key 'sign_type'=>strtoupper('MD5'), 'input_charset'=> strtolower('utf-8'), 'cacert'=> getcwd().'cacert.pem', 'transport'=> 'http', ), ~~~ 3. 引入支付宝类库 ~~~ public function _initialize() { parent::_initialize(); header("Content-type:text/html;charset=utf-8"); vendor('Alipay.Corefunction'); vendor('Alipay.Md5function'); vendor('Alipay.Notify'); vendor('Alipay.Submit'); } ~~~ 4. 构建支付(页面)发起方法 ~~~ public function alipays() { //构建订单数据 $data = array( 'order_customerid' =>$user_id, 'order_sn' =>$out_trade_no, 'order_title' =>'', 'order_goodstypeid'=>$order_goodstypeid, 'order_note'=>$atime, 'order_ptime' =>$order_ptime, 'order_paytypeid' =>$order_paytypeid, 'order_goodprice' =>$set_data['set_value'], 'order_paystatus' =>$order_paystatus, 'order_amount' =>$set_data['set_value'], ); //构造要请求的参数数组,无需改动 $parameter = array( "service" => "create_direct_pay_by_user", "partner" => trim($alipay_config['partner']), "payment_type" => $order_paytypeid, "notify_url" => $notify_url, "return_url" => $return_url, "seller_email" => $seller_email, "out_trade_no" => $out_trade_no, "subject" => $subject, "total_fee" => $set_data['set_value'], "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,"post","ok"); echo $html_text; } ~~~ 5. 构建支付通知方法 ~~~ //购买vip异步通知 function notifyurl() { //这里还是通过C函数来读取配置项,赋值给$alipay_config $alipay_config = C('alipay_config'); //计算得出通知验证结果 $alipayNotify = new 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']; //交易状态 $total_fee = $_POST['total_fee']; //交易金额 //$notify_id = $_POST['notify_id']; //通知校验ID。 //$notify_time = $_POST['notify_time']; //通知的发送时间。格式为yyyy - MM - dd HH:mm:ss。 //$buyer_email = $_POST['buyer_email']; //买家支付宝帐号; $parameter = array( "out_trade_no"=> $out_trade_no,//商户订单编号; "trade_no"=> $trade_no,//支付宝交易号; "total_fee"=> $total_fee,//交易金额; //"trade_status" => $trade_status, //交易状态 //"notify_id" => $notify_id, //通知校验ID。 //"notify_time" => $notify_time, //通知的发送时间。 //"buyer_email" => $buyer_email, //买家支付宝帐号; ); if($_POST['trade_status'] == 'TRADE_FINISHED'||$_POST['trade_status'] == 'TRADE_SUCCESS') { //支付成功后的处理流程 echo "success"; //请不要修改或删除 } else { //验证失败 echo "fail"; } } } //同步通知 public function returnurl() { //头部的处理跟上面两个方法一样,这里不罗嗦了! $alipay_config = C('alipay_config'); $alipayNotify = new 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']; //交易状态 $total_fee = $_GET['total_fee']; //交易金额 //$notify_id = $_GET['notify_id']; //通知校验ID。 //$notify_time = $_GET['notify_time']; //通知的发送时间。 //$buyer_email = $_GET['buyer_email']; //买家支付宝帐号; $parameter = array( "out_trade_no"=> $out_trade_no,//商户订单编号; "trade_no"=> $trade_no,//支付宝交易号; "total_fee"=> $total_fee,//交易金额; //"trade_status" => $trade_status, //交易状态 //"notify_id" => $notify_id, //通知校验ID。 //"notify_time" => $notify_time, //通知的发送时间。 //"buyer_email" => $buyer_email, //买家支付宝帐号 ); if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { //支付功能的处理流程 //跳回到文章页 $this->success('成功')); //项中配置的支付成功页面; } else { //$this->myRecharge('unpay'); //echo "trade_status = ".$_GET['trade_status']; //$this->redirect(C('alipay.errorpage'));//跳转到配置项中配置的支付失败页面; //$this->redirect(U('Recharge / myordererror / ')); $this->display('error'); } } else { //验证失败 //如要调试,请看alipay_notify.php页面的verifyReturn函数 echo "验证失败"; } } ~~~ 6.
';