看好sdkExecute和execute 對應生成app端和網站
product_code和method都不一樣
1、https://docs.open.alipay.com/ 網站和手機端可以使用demo里邊的異步代碼
上邊的文檔-->支付能力--->選擇開發所需要的文檔,加入到對應的php框架里邊,微調即可
2、下邊是簽約的時候注意的不然demo對不上
手機網站就是在手機上進行支付的,可以喚起支付寶APP或者H5支付頁面進行支付
電腦網站支付是在電腦網頁上的,可以出現掃碼頁面或者賬號密碼登錄進行支付
3、項目已上線才可以使用,不然就用沙盒測試,沙盒測試所對應的網關和appid不一樣,這點需要注意下,
4、app支付的時候
下邊這段代碼是網站支付里邊已經有的。只是最后一句沒有,但是提供方法了
$payRequestBuilder = new AlipayTradePagePayContentBuilder(); $payRequestBuilder->setBody($body); $payRequestBuilder->setSubject($subject); $payRequestBuilder->setTotalAmount($total_amount); $payRequestBuilder->setOutTradeNo($out_trade_no);
一、如下為支付寶APP支付PHP SDK DEMO地址。就是服務器端傳給客戶端的url拼接參數(下邊代碼全是app支付的時候的)
https://docs.open.alipay.com/54/106370 這個php的demo在下邊
另外需要注意的是:
json_encode會支付不了,不知道為什么,用字符串拼接的倒是成功了
require_once APPPATH . 'third_party/alipayphp/AopSdk.php'; $aop = new AopClient(); //**沙箱測試支付寶開始 $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do'; //實際上線app id需真實的 $aop->appId = '2********109630962'; $aop->rsaPrivateKey = '++veeqyIY462tz&&&WVUtrlg=='; $aop->format = "json"; $aop->charset = "UTF-8"; $aop->signType = "RSA2"; $aop->alipayrsaPublicKey = '+//JOmL+++r6X6H/zvOz2+iZknLrsIjRlz******4yJt&&&&&&&&&&***K/3bMNlgtt+/Vw2PvgJYqwIDAQAB'; // $bizcontent = json_encode([ // 'body'=>'這個是測試的信息', // 'subject'=>'這是我的標題', // 'out_trade_no'=>'B123456789101122111',//此訂單號為商戶唯一訂單號 // 'total_amount'=> '0.01',//保留兩位小數 // 'product_code'=>'QUICK_MSECURITY_PAY' // ]); $bizcontent = "{\"body\":\"這個是測試的信息\"," . "\"subject\": \"這是我的標題\"," . "\"out_trade_no\": \"B123456782291011333332111\"," . "\"timeout_express\": \"3m\"," . "\"total_amount\": \"0.01\"," . "\"product_code\":\"QUICK_MSECURITY_PAY\"" . "}"; //**沙箱測試支付寶結束 //實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay $request = new AlipayTradeAppPayRequest(); //支付寶回調 $request->setNotifyUrl('http://**********ify_url'); $request->setBizContent($bizcontent); //這里和普通的接口調用不同,使用的是sdkExecute $response = $aop->sdkExecute($request); echo htmlspecialchars($response);
如果報錯可以吧htmlspecialchars給去掉
驗簽
- 支付寶異步驗簽文檔:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.fFjclt&treeId=204&articleId=105301&docType=1#s6
- 上段代碼中$request->setNotifyUrl()填寫的回調URL指向如下方法。
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'; } }
另外注意下返回的數據
- 狀態TRADE_SUCCESS的通知觸發條件是商戶簽約的產品支持退款功能的前提下,買家付款成功;
- 交易狀態TRADE_FINISHED的通知觸發條件是商戶簽約的產品不支持退款功能的前提下,買家付款成功;或者,商戶簽約的產品支持退款功能的前提下,交易已經成功並且已經超過可退款期限。