支付寶支付
(由app端自行調起支付寶/微信)
1 <?php
2
3 define('IN_ECS', true);
4
5 /*App支付 PHP服務端*/
6 /*引入支付寶PHP SDK*/
7 header("Content-type:text/html;charset=utf-8;");
8 require_once('../alipay-sdk-PHP/aop/request/AlipayTradeAppPayRequest.php');
9 require_once('../alipay-sdk-PHP/aop/AopClient.php');
10
11
12 $user_id = isset($_REQUEST['user_id']) ? trim($_REQUEST['user_id']) : 0;
13 $money = isset($_REQUEST['amount']) ? trim($_REQUEST['amount']) : 0;
14
15 if($user_id == 0 || $money ==0){
16 $result = array('code' => 1,'data'=>'缺少參數' );
17 die(json_encode($result));
18 }
19
20
21 $aop = new AopClient;
22 $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
23 $aop->appId = "appid";
24 $aop->format = "json";
25 $aop->charset = "utf-8";
26 $aop->signType = "RSA2";
27 $aop->rsaPrivateKey = '開發者私鑰';
28
29 $aop->alipayrsaPublicKey = '支付寶公鑰';
30
31
32
33 //實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay
34
35 $request = new AlipayTradeAppPayRequest();
36 //SDK已經封裝掉了公共參數,這里只需要傳入業務參數
37 $trade_no = chongzhi_sn();
38 //入庫信息
39 require(dirname(__FILE__) . '../../includes/init.php');
40 include_once(ROOT_PATH .'includes/lib_clips.php');
41
42 $user_m = get_user_info($user_id);
43
44 $dbcontent = array(
45 'user_id' => $user_id,
46 'amount' => $money,
47 'user_name' => $user_m['user_name'],
48 'payment' => "支付寶",
49 'cz_sn' => $trade_no,
50 'add_time' => gmtime()
51 );
52 //傳參信息
53 $bizcontent = array(
54 'body' =>(string)$trade_no,
55 'subject' =>'充值',
56 'total_amount' => $money,
57 'out_trade_no' => (string)$trade_no,
58 'product_code' => 'QUICK_MSECURITY_PAY',
59 'timeout_express'=> '30m'
60 );
61
62 $bizcontent = json_encode($bizcontent);
63 $request->setNotifyUrl("支付回調地址");
64 $request->setBizContent($bizcontent);
65 //這里和普通的接口調用不同,使用的是sdkExecute
66 $response = $aop->sdkExecute($request);
67 //htmlspecialchars是為了輸出到頁面時防止被瀏覽器將關鍵參數html轉義,實際打印到日志以及http傳輸不會有這個問題
68 //echo htmlspecialchars($response);//就是orderString 可以直接給客戶端請求,無需再做處理。
69
70 if($response){
71 if($GLOBALS['db']->autoExecute($ecs->table('user_chongzhi'), $dbcontent, 'INSERT'))
72 {
73 $result = array('code'=>0,'data'=>$response);
74 }else{
75 $result = array('code'=>1,'data'=>'意外出錯,請聯系客服。');
76 }
77 die(json_encode($result));
78 }
79
80 function chongzhi_sn()
81 {
82 /* 選擇一個隨機的方案 */
83 mt_srand((double) microtime() * 1000000);
84 return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
85 }
86
87 ?>
回調
<?php
define('IN_ECS', true);
require_once('../alipay-sdk-PHP/aop/request/AlipayTradeAppPayRequest.php');
require_once('../alipay-sdk-PHP/aop/AopClient.php');
$aop = new AopClient;
$aop->alipayrsaPublicKey = '支付寶公鑰';
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
$myfile = fopen("testfile.txt", "a");
fwrite($myfile, "\r\n");
fwrite($myfile, json_encode($_POST));
if($_POST['trade_status'] == 'TRADE_SUCCESS' ){
//業務處理
echo 'success';
}else{
echo 'fail';
}
fclose($myfile);
?>
所需的私鑰公鑰獲取地址
1.私鑰 (下載rsa簽名驗簽工具)https://docs.open.alipay.com/291/105971/

2.支付寶公鑰
通過上傳私鑰,由支付寶生成公鑰 https://docs.open.alipay.com/291/105972/

3.支付寶聯調日志排查 https://openmonitor.alipay.com/acceptance/cloudparse.htm

