支付寶支付-服務端php對接移動端應用app
阿新 • • 發佈:2018-12-30
準備工作
一、建立應用
1、要在支付寶開放平臺那裡建立自己的應用,建立這裡我簡單描述一下,更詳細的還是官方文件!
2、把裡面的資訊填完,提交稽核(稽核時間大概一天)
3、稽核完了,在應用那裡拿到APPID,把AppId記下來,然後配置應用
4、下載支付寶祕鑰工具
支付寶祕鑰工具
更詳細的,參考官方文件生成教程對應你設定的是RSA2試試RSA
5、下載php-SDK
下載php-sdk
也有更詳細的demo也可以參考
二、開始搞了
1、支付訂單資訊示例
$aop = new AopClient;
$aop ->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = "app_id";
$aop->rsaPrivateKey = '請填寫開發者私鑰去頭去尾去回車,一行字串' ;
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字串';//對應填寫
//例項化具體API對應的request類,類名稱和介面名稱對應,當前呼叫介面名稱:alipay.trade.app.pay
$request = new AlipayTradeAppPayRequest();
//SDK已經封裝掉了公共引數,這裡只需要傳入業務引數
//********注意*************************下面除了body描述不是必填,其他必須有,否則失敗
$bizcontent = json_encode(array(
'body'=>'我是測試資料',
'subject' => 'App支付測試',//支付的標題,
'out_trade_no' => '20170125test01',//支付寶訂單號必須是唯一的,不能在支付寶再次使用,必須重新生成,哪怕是同一個訂單,不能重複。否則二次支付時候會失敗,訂單號可以在自己訂單那裡保持一致,但支付寶那裡必須要唯一,具體處理自己操作!
'timeout_express' => '30m',//過期時間(分鐘)
'total_amount' => '0.01',//金額最好能要保留小數點後兩位數
'product_code' => 'QUICK_MSECURITY_PAY'
));
$request->setNotifyUrl("商戶外網可以訪問的非同步地址");//你在應用那裡設定的非同步回撥地址
$request->setBizContent($bizcontent);
//這裡和普通的介面呼叫不同,使用的是sdkExecute
$response = $aop->sdkExecute($request);
//htmlspecialchars是為了輸出到頁面時防止被瀏覽器將關鍵引數html轉義,實際列印到日誌以及http傳輸不會有這個問題
echo htmlspecialchars($response);//就是orderString 可以直接給客戶端請求,無需再做處理。這裡就是方便列印給你看,具體你直接可以在方法那裡return出去,不用加htmlspecialchars,或者響應給app端讓他拿著這串東西調起支付寶支付
2、這裡是列印加簽是資料
通過sdk生成的加簽後的資料
3、非同步處理
public function notifyurl()
{
$aop = new \AopClient;
$aop->alipayrsaPublicKey = '請填寫支付寶公鑰,一行字串';
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
if($flag){
//驗證成功
//這裡可以做一下你自己的訂單邏輯處理
echo 'success';//這個必須返回給支付寶,響應個支付寶,
} else {
//驗證失敗
echo "fail";
}
//$flag返回是的布林值,true或者false,可以根據這個判斷是否支付成功
}
4、支付寶非同步帶過來的資料
支付寶提交過來的POST原資料,json資料提交過了給你
這裡我把他變成陣列,方便瀏覽資訊
5、結合App支付做一個同步通知處理
寫個方法去處理同步的資料,讓app把支付寶同步返回的資料提交給後臺處理,以非同步資料為主同步為輔這樣處理驗證。保證支付資料一致準確,建議做一下吧,因為我們搭建的伺服器如果出現問題了,支付寶的非同步資料收不到,但是app可以收到支付寶的同步資料,不過支付寶伺服器會在24小時內每隔一段時間再請求我們的伺服器的。為了保證不會出現這樣的事情。保證使用者體驗度,建議做個同步和非同步處理,非同步為主,同步為輔!非同步處理了邏輯改變訂單狀態,同步也可以去查詢訂單狀態是否改變,如果沒有改變就走同步的資料,在同步方法那裡做修改訂單狀態的邏輯處理!