支付寶支付
1:首先去支付寶的官網下載第三方sdk,如下圖放在vendor下面
然后在公共方法里面封裝一個pay.class.php的方法,來處理第三方支付
貼上源碼
//支付寶
public function alipay($out_trade_no,$total_amount,$body,$subject){
? ? $config = C('payment.alipay');//讀取配置
//超時時間
? ? $timeout_express="1m";
? ? /*pc支付類*/
? ? Vendor('Alipay.wappay.service.AlipayTradeService');//導入包
? ? Vendor('Alipay.wappay.buildermodel.AlipayTradePagePayContentBuilder');//導入包
? ? $payRequestBuilder = new \AlipayTradePagePayContentBuilder();
? ? Vendor('Alipay.wappay.service.AlipayService');
? ? $aliPay = new \AlipayService();
? ? $aliPay->setAppid($config['app_id']);
? ? $aliPay->setNotifyUrl($config['notify_url']);
? ? $aliPay->setRsaPrivateKey($config['merchant_private_key']);
? ? $aliPay->setTotalFee($total_amount);
? ? $aliPay->setOutTradeNo($out_trade_no);
? ? $aliPay->setOrderName($body);
? ? $result = $aliPay->doPay();
? ? $result = $result['alipay_trade_precreate_response'];
? ? if(intval($result['code'])===10000 && $result['msg']==='Success'){
? ? ? ? $payRequestBuilder->setBody($body);
? ? ? ? $payRequestBuilder->setSubject($subject);
? ? ? ? $payRequestBuilder->setOutTradeNo($out_trade_no);
? ? ? ? $payRequestBuilder->setTotalAmount($total_amount);
? ? ? ? $payRequestBuilder->setTimeExpress($timeout_express);
? ? ? ? $payResponse = new \AlipayTradeService($config);
? ? ? ? $result = $payResponse->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
? ? ? ? //輸出表單
? ? ? ? var_dump($result);die;
? ? }
}
然后掃碼之后還存在一個回調問題
1:同步回調跳轉地址
/**
* 支付寶同步回調處理方法
*/
public function return_url(){
? ? $config = C('payment.alipay');
? ? Vendor('Alipay.wappay.service.AlipayTradeService');
? ? $arr = $_GET;
? ? $alipaySevice = new \AlipayTradeService($config);
? ? $result = $alipaySevice->check($arr);
? ? if($result) {
? ? ? ? $url = U('');
? ? ? ? Header("Location:$url");
? ? }else {
? ? ? ? ?$url = U('');
? ? ? ? Header("Location:$url");
? ? }
}
2:異步回調處理數據
/**
* 支付寶異步回調處理方法
*/
? ? public function notify_url(){
? ? ? ? $config = C('payment.alipay');
? ? ? ? Vendor('Alipay.wappay.service.AlipayTradeService');
? ? ? ? $arr = $_POST;
? ? ? ? $alipaySevice = new \AlipayTradeService($config);
? ? ? ? $result = $alipaySevice->check($arr);
//? ? ? ? \Think\Log::record(json_encode($result));exit;
? ? ? ? if($result) {
? ? ? ? ? ? /*app_id是否為該商戶本身*/
? ? ? ? ? ? if($arr['app_id'] != $config['app_id']){
? ? ? ? ? ? ? ? echo "fail";exit;
? ? ? ? ? ? }
? ? ? ? ? ? //驗證成功
//獲取支付寶的通知返回參數,可參考技術文檔中服務器異步通知參數列表
// 獲取相關數據
? ? ? ? ? ? $out_trade_no = $arr['out_trade_no'];? ? ? //商戶訂單號
? ? ? ? ? ? $deal_no? ? = $arr['trade_no'];? ? ? ? ? //支付寶交易號
? ? ? ? ? ? $trade_status = $arr['trade_status'];? ? ? //交易狀態
? ? ? ? ? ? $money_real = $arr['total_amount'];? ? ? //交易金額
? ? ? ? ? ? $seller_id? ? ? = $arr['buyer_id'];? ? ? ? ? //賣家支付寶賬號id
? ? ? ? ? ? if($trade_status == 'TRADE_FINISHED' OR $trade_status == 'TRADE_SUCCESS') {
? ? ? ? ? ? //訂單處理的地方
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ?//失敗了之后
? ? ? ? ? ? ? ? ? ? ?echo 'fail';
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? }else {
? ? ? ? ? ? ? ? ? //驗證失敗
? ? ? ? ? ? ? ? ? echo "fail";
? ? ? ? ? ?}
2:微信支付
(目錄結構)
//微信支付
public function wxpay($out_trade_no,$order){
? ? Vendor('Wxpay.Weixinpay');
? ? $weixinpay = new \Weixinpay();
? ? $result = $weixinpay->unifiedOrder($order);
? ? if($result['return_code'] = 'SUCCESS'){
? ? ? ? $return['code_url'] = $result['code_url'];
? ? ? ? $return['out_trade_no'] = $out_trade_no;
? ? ? ? $return['status'] = 1;
? ? ? ? $return['time'] = time();
? ? ? ? $return['total_fee'] = $order['total_fee']/100;
? ? ? ? $url = '需要跳轉的掃碼地址?out_trade_no='.$out_trade_no.'&total_fee='.$return['total_fee'].'&url='.$return['code_url'].'&time='.$return['time'];
? ? ? ? header('Location: '.$url);
? ? }else{
? ? ? ? $return['status'] = 0;
? ? }
}
異步回調
//微信回調
/**
* 微信異步回調處理方法
*/
public function wx_notify_url(){
? ? vendor('Wxpay.Weixinpay');
? ? $wx_config = C('payment.wxpay');
? ? $wxpay = new \Weixinpay($wx_config);
? ? $result = $wxpay->notify();
? ? if ($result === false) {
? ? ? ?exit;
? ? }else{
? ? ? ? /*app_id是否為該商戶本身*/
? ? ? ? if($result['appid'] != $wx_config['appid']){
? ? ? ? ? ? echo "fail";exit;
? ? ? ? }
? ? ? ? //商戶訂單號
? ? ? ? if($result['result_code'] == "SUCCESS" OR $result['return_code'] == "SUCCESS"){
? ? ? ? ? ? ? ? //處理訂單 成功之后要返回success
? ? ? ? ? ? ? ? ? ? echo 'success';
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? //失敗了打印fail
? ? ? ? ? ? ? ? echo 'fail';
? ? ? ? ? ? }
}
}
}