微信小程序中的支付寶支付

              作者:辰風沐陽 閱讀:2384 發布時間:2021-11-24 上次更新:2021-12-04

              1. 準備資料


              沙箱環境: 用于開發時進行支付回調測試

              支付寶開放平臺: https://open.alipay.com , 使用支付寶掃碼登錄,進入控制臺,找到沙箱環境

              開放平臺沙箱環境: https://open.alipay.com/platform/appDaily.htm?tab=info

              沙箱賬號: 用于登錄沙箱版支付寶

              2. 創建網頁應用


              登錄支付寶開放平臺: https://open.alipay.com , 進入控制臺面板: https://open.alipay.com/platform/developerIndex.htm

              在控制臺中的我的應用中創建 網頁&移動應用,并且選擇支付接入

              應用類型設置為 網頁應用,其他信息按照提示填寫即可

              3. 生成支付寶應用公鑰


              點擊接口加密方式中的 設置

              加簽內容配置

              支付寶密鑰在線生成器: https://miniu.alipay.com/keytool/create , 也可以下載軟件版生成器生成密鑰

              將下圖中的應用公鑰復制并粘貼到上圖中的 序號3: 公鑰字符,進而得到支付寶應用公鑰,開發者在調起支付時需要使用應用私鑰和支付寶應用公鑰。所以, 一定要將 應用私鑰、應用公鑰、支付寶應用公鑰 保存好存起來

              通過應用公鑰獲取到支付寶應用公鑰,加簽配置完成

              4. 商家綁定網頁應用


              通過提示可得出結論: 要使用手機網站支付、當面付能力需要商家綁定此應用進行簽約

              進入支付寶商家中心: https://mrchportalweb.alipay.com , 在賬號中心中找到 APPID 綁定,點擊 添加綁定

              輸入支付寶開發平臺網頁應用的 APPID,點擊 下一步 完成綁定

              綁定此應用的商家如果已經簽約該能力,應用的能力名稱對應的狀態直接就是 已生效

              如果商家沒有簽約的話,可以在商家中心-產品中心進行簽約, 簽約成功后網頁應用的狀態自動變為 已簽約

              5. 當面付: 買家掃描商家二維碼完成支付


              技術棧: ThinkPHP6.0 + yansongda/pay=2.* + endroid/qr-code

              使用 yansongda/pay 擴展包調用支付寶掃碼支付接口

              獲取掃碼支付URL地址, 例如: https://qr.alipay.com/bax01214wuzcetwrql5700a8

              1. composer require yansongda/pay:^2.10

              使用 endroid/qr-code 擴展包將支付寶接口返回的URL地址轉為二維碼 (收款碼)

              1. composer require endroid/qr-code

              查看掃碼支付章節: https://pay.yansongda.cn/docs/v2/alipay/pay.html

              在構造方法中初始化配置參數,并且生成支付寶功能操作實例: $alipay

              1. public function __construct()
              2. {
              3. $config = [
              4. 'app_id' => '', // 應用appid
              5. 'notify_url' => '', // 異步通知地址
              6. 'ali_public_key' => '', // 支付寶應用公鑰
              7. 'private_key' => '', // 應用私鑰 加密方式: **RSA2**
              8. 'mode' => 'dev', // 設置此參數,將進入沙箱模式;省略該參數,進入正式環境
              9. ];
              10. $this->alipay = \Yansongda\Pay\Pay::alipay($config);
              11. }

              $qrcode 是一個 URL 地址,根據此地址生成一張二維碼 $image, 生成商家收款碼,讓用戶使用支付寶掃碼支付

              1. $order = [
              2. 'out_trade_no' => time(), // 商家訂單號
              3. 'total_amount' => 1, // 訂單金額,單位:元
              4. 'subject' => '購買商品', // 訂單備注
              5. ];
              6. try {
              7. // 應用 appid 配置錯誤時會拋出異常
              8. $qrcode = $this->alipay->scan($order)->qr_code;
              9. } catch (\Exception $e) {
              10. // 異常處理 記錄日志 ...
              11. // $e->getMessage()
              12. }
              13. $image = \Qrcode::generate($qrcode);
              14. echo '<img src="' . $image . '">';

              異步通知地址: 當用戶使用支付寶支付成功后,支付寶會向配置的 notify_url 發送請求,并攜帶一些參數

              在 ThinkPHP 6.0 中可以通過 input() 來獲取這些參數,或通過以下函數獲取

              1. file_get_contents("php://input");

              但是實際開發中要用擴展包提供的方式,因為它幫助我們完成了驗簽的操作,可以更好的處理回調邏輯

              1. /**
              2. * 異步通知地址
              3. */
              4. public function notify()
              5. {
              6. try {
              7. $data = $this->alipay->verify(); // 是的,驗簽就這么簡單!
              8. // 請自行對 trade_status 進行判斷及其它邏輯進行判斷
              9. // 只有交易通知狀態為 TRADE_SUCCESS 或 TRADE_FINISHED 時,支付寶才會認定為買家付款成功。
              10. // 1、商戶需要驗證該通知數據中的out_trade_no是否為商戶系統中創建的訂單號;
              11. // 2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額);
              12. // 3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據的對應的操作方
              13. // 4、驗證app_id是否為該商戶本身。
              14. // 5、其它業務邏輯情況
              15. if (in_array($data->trade_status, ['TRADE_SUCCESS', 'TRADE_FINISHED'], true)) {
              16. // 業務邏輯處理 修改訂單狀態
              17. }
              18. } catch (\Exception $e) {
              19. // $e->getMessage();
              20. }
              21. return $this->alipay->success()->send();
              22. }

              6. 手機網站支付: 通過瀏覽器喚起支付寶客戶端進行付款


              在構造方法中初始化配置并且獲取操作實例

              1. public function __construct()
              2. {
              3. $config = [
              4. 'app_id' => '', // 應用appid
              5. 'notify_url' => '', // 異步通知地址
              6. 'return_url' => '', // 回調地址
              7. 'ali_public_key' => '', // 支付寶應用公鑰
              8. 'private_key' => '', // 應用私鑰 加密方式: **RSA2**
              9. 'mode' => 'dev', // 設置此參數,將進入沙箱模式;省略該參數,進入正式環境
              10. ];
              11. $this->alipay = \Yansongda\Pay\Pay::alipay($config);
              12. }

              在小程序中可以生成一個 URL 鏈接地址,讓用戶復制鏈接至瀏覽器進行支付

              這個鏈接地址就是調用手機網站支付的控制器方法入口,比如: http://m.837wan.com/h5_pay/index

              1. /**
              2. * 手機網站支付
              3. */
              4. public function index()
              5. {
              6. $order = [
              7. 'out_trade_no' => time(),
              8. 'total_amount' => 1,
              9. 'subject' => '手機網站支付',
              10. ];
              11. return $this->alipay->wap($order)->send();
              12. }

              訪問上面的 URL 鏈接地址,會自動重定向到以下頁面,如下圖所示,提供了兩種支付方式:

              1、 使用支付寶 APP 付款 (拉起支付寶客戶端進行付款) 2、 繼續瀏覽器付款 (登錄支付寶賬號進行付款)

              支付成功后,異步通知同掃碼支付,點擊 已完成付款 會自動重定向到 return_url 地址,可在頁面中放張支付成功的圖片

              夜夜嗨AV一区二区三区_91精品国产91久久久久_亚洲精品无码鲁网午夜_一本大道久久东京热