丁不二技術分享:PHP 支付寶支付接入thinphp方法分享
注,我這里用的是 ThinkCmf5.0 與 Thinkphp5.0 有微小的差異,我會標注出來
1、先去支付寶官網把Demo 下載了,然后打開根目錄中的“config.php”,把里面的參數填寫,然后上傳到extent目錄,我起文件夾名為 "wapPay"
2.第二步進入支付寶開發者中心,把相關開發設置的參數填了
3、前端 HTML 代碼
支付訂單
function pay() {undefined
location.href = "{:cmf_url('Order/baoPay',array('order_id'=>$order_id))}";
}
4、PHP 代碼
// 調起支付寶支付
public function baoPay(){undefined
$order_id = $this->request->param('order_id');
$order_info = Db::name("server_order")
->alias('a')
->join('shop_server b','a.server_id = b.s_id')
->where(['a.o_id'=>$order_id])
->field('a.order_price,a.order_num,b.s_name')
->find();
// 引入支付寶第三方sdk類庫 Thinkphp5.0 用 Loader::import() 引入
import('wapPay.wappay.service.AlipayTradeService',EXTEND_PATH);
import('wapPay.wappay.buildermodel.AlipayTradeWapPayContentBuilder',EXTEND_PATH);
$config = array (
//應用ID,您的APPID。
'app_id' => "202321XXXXXX",
//商戶私鑰,您的原始格式RSA私鑰 自己用官方給的程序生成的
'merchant_private_key' => "MIIEow**************",
//異步通知地址
'notify_url' => "http://你的網址
/simplewind/extend/wapPay/notify_url.php",
//同步跳轉
'return_url' => "http://你的網址
/public/portal/Order/return_url.html",
//編碼格式
'charset' => "UTF-8",
//簽名方式
'sign_type'=>"RSA2",
//支付寶網關
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付寶公鑰,查看地址:
https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。這個不是自己生成的,是系統給的
'alipay_public_key' => "MIIBIjANBgkqhkiG9w0BAQEF****************AAOCAQ8AMIIBCgKCAQEAkMV",
);
//商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
$out_trade_no = $order_info['order_num'];
//訂單名稱,必填
$subject = $order_info['s_name'];
//付款金額,必須填
$total_amount = $order_info['order_price'];
//商品描述,可空
$body = '';
//超時時間
$timeout_express="1m";
$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
$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->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);
return ;
}
// 支付寶授權回調函數
public function return_url(){undefined
// 引入支付寶第三方sdk類庫
import('wapPay.wappay.service.AlipayTradeService',EXTEND_PATH);
$config = array (
//應用ID,您的APPID。
'app_id' => "2023030702332023",
//商戶私鑰,您的原始格式RSA私鑰
'merchant_private_key' => "MIIEowIBAAKC******************AQEAwS/mYtS",
//異步通知地址
'notify_url' => "http://你的網址
/simplewind/extend/wapPay/notify_url.php",
//同步跳轉
'return_url' => "http://你的網址
/public/portal/Order/return_url.html",
//編碼格式
'charset' => "UTF-8",
//簽名方式
'sign_type'=>"RSA2",
//支付寶網關
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付寶公鑰, 非自己生成 查看地址:
https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
'alipay_public_key' => "MIIBIjANBgkqhkiG9w0BAQEF****************AAOCAQ8AMIIBCgKCAQEAkMV",
);
$arr=$_GET;
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($arr);
/* 實際驗證過程建議商戶添加以下校驗。
1、商戶需要驗證該通知數據中的out_trade_no是否為商戶系統中創建的訂單號,
2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額),
3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據的對應的操作方(有的時候,一個商戶可能有多個seller_id/seller_email)
4、驗證app_id是否為該商戶本身。
*/
if($result) { //驗證成功
//商戶訂單號
$out_trade_no = $arr['out_trade_no'];
//支付寶交易號
$trade_no = $arr['trade_no'];
//交易狀態
//$trade_status = $arr['trade_status'];
//——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)——
//請在這里加上商戶的業務邏輯程序代碼
Db::name("server_order")->where(['order_num'=>$out_trade_no])->update(['is_pay'=>1,'is_del'=>0]);
echo "success"; //請不要修改或刪除
return $this->redirect('Order/payform');
}else {undefined
//驗證失敗
echo "fail"; //請不要修改或刪除
}
}
聲明:本站所有文章資源內容,如無特殊說明或標注,均為采集網絡資源。如若本站內容侵犯了原著者的合法權益,可聯系本站刪除。
