1. 程式人生 > >PHP支付寶APP支付介面

PHP支付寶APP支付介面

1-1:首先下載支付寶官方SDK,我的是PHP版的,起名“alipay”

1-2:配置檔案 config.php

 // 支付寶
    'ALIPAY_CONFIG' =>[
        'app_id' =>'12345678',    //app_id
        // 支付寶私鑰
        'rsaPrivateKey' =>'ZS1FY8LDXd',
        // 支付寶公鑰       
	    'alipayrsaPublicKey'=>'p/JhMWNiQIDAQAB',  
        'notify_url' =>'http://www.abc.com/public/api/portal/Order/notify_url.html',//回撥地址(支付寶支付成功後回撥修改訂單狀態的地址)
        'payment_type' =>1,//(固定值)
        'charset'    => 'utf-8',//編碼
        'sign_type' => 'RSA2',//簽名方式
        'version'   =>"1.0",//固定值
        'url'       => 'https://openapi.alipay.com/gateway.do',//固定值
        'method'    => 'alipay.trade.app.pay',                //固定值
     ],

注:其中,支付寶公鑰為這個

1-3:控制器

// 1-2 支付寶生成簽名
    public function ZfbSing()
    {

        if ($this->request->isGet()) {
           
           
            // 引入支付寶第三方sdk類庫
            import('alipay.aop.AopClient', EXTEND_PATH);
            // 呼叫支付寶配置檔案
            $API = config('ALIPAY_CONFIG');

            //構造業務請求引數的集合(訂單資訊)
            $content = array();
            $content['subject'] = '商品標題';                 // 商品標題
            $content['body'] = '商品描述';  // 商品描述 非必須
            $content['out_trade_no'] = '訂單號';         // 訂單號
            $content['timeout_express'] = "15m";                         // 允許最晚的支付時間  非必須
            $content['total_amount'] = '15.00';       // 要求必須為浮點型,訂單金額
            $content['product_code'] = "QUICK_MSECURITY_PAY";            //銷售產品碼,固定值
            $con = json_encode($content);                                //$content是biz_content的值,將之轉化成json字串

            //公共引數
            $Client = new \AopClient();                 //例項化支付寶sdk裡面的AopClient類,下單時需要的操作,都在這個類裡面
            $param = array();
            $param['app_id'] = $API['app_id'];         //支付寶分配給開發者的應用ID
            $param['method'] = $API['method'];         //介面名稱
            $param['charset'] = $API['charset'];       //請求使用的編碼格式
            $param['sign_type'] = $API['sign_type'];   //商戶生成簽名字串所使用的簽名演算法型別
            $param['timestamp'] = date("Y-m-d H:i:s");   //傳送請求的時間
            $param['version'] = $API['version'];       //呼叫的介面版本,固定為:1.0
            $param['notify_url'] = $API['notify_url']; //支付寶伺服器主動通知地址
            $param['biz_content'] = $con;              //業務請求引數的集合,長度不限,json格式

            $paramStr = $Client->getSignContent($param);//組裝請求籤名引數  到此步目前沒有問題
            $sign = $Client->alonersaSign($paramStr, $API['rsaPrivateKey'], 'RSA2'); //生成簽名
            $param['sign'] = $sign;
            $str = $Client->getSignContentUrlencode($param);       //最終請求引數

            echo json_encode(['code' => 100, 'msg' => '成功', 'data' => ['sing' => $str]], JSON_UNESCAPED_UNICODE);
            exit;
        } else {
            echo json_encode(['code' => 101, 'msg' => '請求型別錯誤'], JSON_UNESCAPED_UNICODE);
            exit;
        }

    }

1-4:支付寶支付成功回撥

// 支付寶支付非同步回撥       
    public function notify_url()
    {
        import('alipay.aop.AopClient', EXTEND_PATH);    // 引入支付寶第三方類庫
        $API = config('ALIPAY_CONFIG');                 // 呼叫支付寶配置檔案
        $Client = new \AopClient();                     // 例項化類
        $Client->alipayrsaPublicKey = $API['alipayrsaPublicKey'];
        $parm = $_POST;
        //  驗證簽名
        $flag = $Client->rsaCheckV1($parm,NULL,"RSA2");
        if($flag){
            if ($parm['trade_status'] == 'TRADE_SUCCESS' || $parm['trade_status'] == 'TRADE_FINISHED') {

                // 此處為自己業務邏緝處理
                $OrderModel = new ServerOrderModel();
                $condition['order_num'] = $parm['out_trade_no'];      // 交易訂單號
                $data['pay_time'] = $parm['gmt_payment'];             // 付款時間
                $data['pay_type'] = 1;                                // 支付型別   1:支付寶 2:微信
                $data['is_pay'] = 1;                                  // 是否支付
                $OrderModel->updateOrder($condition, $data);
                echo 'success';
            }
        }
    }

1-5:備註,回撥方法中,$_POST陣列如下:

{
 "gmt_create":"2018-10-29 14:06:27",
 "charset":"utf-8",
 "seller_email":"[email protected]",
 "subject":"索尼相機系列",
 "sign":"NS+bPlvoAHfNIcf97mUmtkBcTaTB\/vMTyVp9R4QM+DM7wlr",
 "body":"所選服務:索尼相機系列 x 1",
 "buyer_id":"2088402609538780",
 "invoice_amount":"0.01",
 "notify_id":"2018102900222140628038781018476292",
 "fund_bill_list":'[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]',
 "notify_type":"trade_status_sync",
 "trade_status":"TRADE_SUCCESS",
 "receipt_amount":"0.01",
 "app_id":"12345678",
 "buyer_pay_amount":"0.01",
 "sign_type":"RSA2",
 "seller_id":"2088031469395781",
 "gmt_payment":"2018-10-29 14:06:27",
 "notify_time":"2018-10-29 14:06:28",
 "version":"1.0",
 "out_trade_no":"20181029140609758396",
 "total_amount":"0.01",
 "trade_no":"2018102922001438781005066681",
 "auth_app_id":"2018030702332021",
 "buyer_logon_id":"894***@qq.com",
 "point_amount":"0.00"
 }