1. 程式人生 > >用PHP SDK做支付寶APP支付(下單及驗籤)

用PHP SDK做支付寶APP支付(下單及驗籤)

一、如下為支付寶APP支付PHP SDK DEMO地址。

二、如下為支付寶APP支

  • 說明:此處用CI框架,若正式上線需將引數$aop->appId、$aop->rsaPrivateKey、$aop->alipayrsaPublicKey都改成正式的。

  • 示例程式碼中的APP ID即$aop->appId從沙箱應用獲得。

  • 用官網提供的公私鑰生成工具一次生成一對,一個應用私鑰($aop->rsaPrivateKey)和一個應用公鑰。將應用公鑰上傳至沙箱環境(上線就上傳至正式環境)獲得支付寶公鑰(即$aop->alipayrsaPublickey)。

  • 官網demo中將支付寶返回的預支付資訊用htmlspecialchars()處理。本人使用時用htmlspecialchars處理後安卓前端無法調起支付介面。故示例中不用htmlspecialchars()。

class AlipayController extends CI_Controller
{
    function pay()
    {
        require_once('/www/my/app/third_party/alipay/aop/AopClient.php');
        require_once('/www/my/app/third_party/alipay/aop/request/AlipayTradeAppPayRequest.php');
        $aop = new \AopClient();

        //**沙箱測試支付寶開始
        $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do"
; //實際上線app id需真實的 $aop->appId = "2016080300158242"; $aop->rsaPrivateKey = '填寫工具生成的商戶應用私鑰'; $aop->format = "json"; $aop->charset = "UTF-8"; $aop->signType = "RSA"; $aop->alipayrsaPublicKey = '填寫從支付寶開放後臺檢視的支付寶公鑰'; $bizcontent = json_encode([ 'body'
=>'商品資訊', 'subject'=>'衣服', 'out_trade_no'=>'123456',//此訂單號為商戶唯一訂單號 'total_amount'=> '9.88',//保留兩位小數 'product_code'=>'QUICK_MSECURITY_PAY' ]); //**沙箱測試支付寶結束 //例項化具體API對應的request類,類名稱和介面名稱對應,當前呼叫介面名稱:alipay.trade.app.pay $request = new \AlipayTradeAppPayRequest(); //支付寶回撥 $request->setNotifyUrl("https://demo.com/pay/alinotify"); $request->setBizContent($bizcontent); //這裡和普通的介面呼叫不同,使用的是sdkExecute $response = $aop->sdkExecute($request); echo $response; }

三、驗籤

class AlipayNotifyController extends CI_Controller
{
    function notify()
    {
        require_once('/www/my/app/third_party/alipay/aop/AopClient.php');
        $aop = new AopClient;
        $aop->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字串';
        //此處驗籤方式必須與下單時的簽名方式一致
        $flag = $aop->rsaCheckV1($_POST, NULL, "RSA");
        //驗籤通過後再實現業務邏輯,比如修改訂單表中的支付狀態。
        /**
        ①驗籤通過後核實如下引數trade_status、out_trade_no、total_amount、seller_id
        ②修改訂單表
        **/
        //列印success,應答支付寶。必須保證本介面無錯誤。只打印了success,否則支付寶將重複請求回撥地址。
        echo 'success';
    }
}