Thinkphp 支付寶插件的引入 和調用


本文版權歸本寶寶所有 未得允許不得轉載

下載地址傳送門 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.twLYka&treeId=62&articleId=103566&docType=1

1 文件 demo 的下載  后 選擇 md5版本或者是RDA版本    我這兒選擇MD5版本  php utf8  版本    更改一下 文件名  

2 文件的放入 在 Thinkphp/library/vendor  

二 : 關鍵點技術分析  

1 配置參數的 分析 於講解 

  找到alipay.config.php  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//合作身份者ID,簽約賬號,以2088開頭由16位純數字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
$alipay_config [ 'partner' ]       =  '' ;
 
//收款支付寶賬號,以2088開頭由16位純數字組成的字符串,一般情況下收款賬號就是簽約賬號
$alipay_config [ 'seller_id' ] =  $alipay_config [ 'partner' ];
 
// MD5密鑰,安全檢驗碼,由數字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
$alipay_config [ 'key' ]           =  '' ;
 
// 服務器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
$alipay_config [ 'notify_url' ] =  "http://商戶網址/create_direct_pay_by_user-PHP-UTF-8/notify_url.php" ;
 
// 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
$alipay_config [ 'return_url' ] =  "http://商戶網址/create_direct_pay_by_user-PHP-UTF-8/return_url.php" ;
 
//簽名方式
$alipay_config [ 'sign_type' ]    =  strtoupper ( 'MD5' );
 
//字符編碼格式 目前支持 gbk 或 utf-8
$alipay_config [ 'input_charset' ]=  strtolower ( 'utf-8' );
 
//ca證書路徑地址,用於curl中ssl校驗
//請保證cacert.pem文件在當前文件夾目錄中
$alipay_config [ 'cacert' ]    =  getcwd (). '\\cacert.pem' ;
 
//訪問模式,根據自己的服務器是否支持ssl訪問,若支持請選擇https;若不支持請選擇http
$alipay_config [ 'transport' ]    =  'http' ;
 
// 支付類型 ,無需修改
$alipay_config [ 'payment_type' ] =  "1" ;
         
// 產品類型,無需修改
$alipay_config [ 'service' ] =  "create_direct_pay_by_user" ;

通過 查看 這些 基本配置參數 我們 可以將參數 配置到config.php文件中  

復制代碼
 1 'ALIPAY_CONFIG' => array(
 2         'partner' => '',  //身份信息 (必填)
 3         'seller_id' => '',  //id  (必填)
 4         'key' => '',      //key值(必填)
 5         'notify_url' => '', //必須是外網可以訪問到的地址 
 6         'return_url' => '',  //支付寶返回后的同步跳轉地址
 7         'sign_type' => strtoupper('MD5'),  
 8         'input_charset' => strtolower('utf-8'),
 9         'transport' => 'http',
10         'cacert' => VENDOR_PATH.'Alipay/cacert.pem',
11         'payment_type' => '1',
12         'service' => 'create_direct_pay_by_user',
13         'anti_phishing_key' => '',  //釣魚 可以不填寫
14         'exter_invoke_ip' => '',    //可以不填寫
15     ),
復制代碼

2 php方法的寫入 可以放入 function 中方便我們的使用

復制代碼
function subPayment($tradeNo, $amount, $subject, $body="")
{
    $alipayConfig = C('ALIPAY_CONFIG');
    //發起請求時的參數
    $requestParam = $alipayConfig;
    $requestParam['out_trade_no'] = $tradeNo;
    $requestParam['subject'] = $subject;
    $requestParam['total_fee'] = $amount;
    $requestParam['body'] = $body;
    $requestParam['_input_charset'] = trim(strtolower($alipayConfig['input_charset']));

    vendor('Alipay/lib/alipay_submit','','.class.php');
    $alipaySubmitObj = new \AlipaySubmit($alipayConfig);
    $htmlText = $alipaySubmitObj->buildRequestForm($requestParam, "get", "確定");
    echo $htmlText;
}
復制代碼

3內部控制器的調用

subPayment($orderData['order_no'], $orderData['amount'], NOW_TIME.'支付測試', NOW_TIME.'支付描述');
            //參數1 生成 唯一的編號  參數2 金額  參數3: 支付的subject 參數 4 支付描述信息

 

4 根據返回結果信息做相應的更改  創建一個控制器

①支付寶返回同步地址的體現

復制代碼
 1 private $_config;
 2     private $_notifyObj;
 3     function _initialize(){
 4         vendor('Alipay/lib/alipay_notify','','.class.php');
 5         $this->_config = C('ALIPAY_CONFIG');
 6         $this->_notifyObj = new \AlipayNotify($this->_config);
 7     }
 8     //同步的通知地址
 9     public function returnUrl()
10     {
11         $checkResult = $this->_notifyObj->verifyReturn();
12         if ($checkResult) {
13             if ($_GET['is_success'] == "T" && $_GET['trade_status'] == "TRADE_SUCCESS") {
14                 $this->success('對訂單'.$_GET['out_trade_no'].'支付成功',U('User/index'));
15                 return;
16             }else{
17                 $this->error('支付失敗,請進訂單中心查看!');
18                 return;
19             }
20         }else{
21             $this->error('支付通知驗證失敗,請聯系管理員!');
22             return;
23         }
24     }
復制代碼

②異步地址的修改 ps:必須在外網才能夠生效 成功 后必須echo "success" 這個字符串 否則支付寶監聽不到 會在24小時20分鍾一直提醒

復制代碼
 1  //異步的通知地址
 2     public function notifyUrl()
 3     {
 4         $checkResult = $this->_notifyObj->verifyNotify();
 5         if ($checkResult) {
 6             $tradeStatus = $_POST['trade_status'];
 7             $outTradeNo = $_POST['out_trade_no'];
 8             $tradeNo = $_POST['trade_no'];
 9             if ($tradeStatus == "TRADE_SUCCESS") {
10                 $orderData = D('Order')->where(array('order_no'=>$outTradeNo))->find();
11                 if (empty($orderData)) {
12                     M('log')->add(array(
13                         'ser_type' => 1,
14                         'code' => 'ORDER_EXC',
15                         'ser_data' => serialize(array('order_no'=>$outTradeNo,'trade_no'=>$tradeNo)),
16                         'create_time'=>NOW_TIME,
17                     ));
18                     exit;
19                 }
20 
21                 if ($orderData['status'] != 0) {
22                     M('log')->add(array(
23                         'ser_type' => 2,
24                         'code' => 'ORDER_EXC',
25                         'ser_data' => serialize(array('order_no'=>$outTradeNo,'trade_no'=>$tradeNo))
26                     ));
27                     exit;
28                 }
29 
30                 D('Order')->where(array('order_no'=>$outTradeNo))->save(array('status'=>1));
31 
32                 echo "success";
33             }else{
34                 D('Order')->where(array('order_no'=>$outTradeNo))->save(array('status'=>2));
35             }
36         }else{
37             echo "fail";
38         }
39 
40     }
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM