佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > php 服務端集成支付寶APP支付實例

php 服務端集成支付寶APP支付實例

熱門標簽:阿里云 科大訊飛語音識別系統(tǒng) 銀行業(yè)務 團購網(wǎng)站 Linux服務器 服務器配置 Mysql連接數(shù)設置 電子圍欄

支付寶支付分為了很多種場景,這里只講述支付寶APP支付功能集成,期間遇到了特別大的坑,因此我簡單描述下集成過程,并概述遇到的問題及解決方案

由于公司業(yè)務簡單,只支持支付寶支付,而無需關心退款,查詢等等額外功能,因此該篇內容僅僅講述支付寶支付接口時服務端如何準備APP拉取支付訂單的信息,大概流程如下

一、創(chuàng)建應用及配置

首先,需要到螞蟻金服開發(fā)平臺(open.alipay.com)注冊應用,并獲取應用ID,并配置應用,這里在配置時主要是簽約,生成應用的RSA2公私鑰,同時獲取到支付寶提供的支付公鑰等,這部分官網(wǎng)后臺都有提示,比較簡單

二、下載對應SDK

這里我是在PHP后臺集成服務,因此下載的是PHP SDK,地址:https://docs.open.alipay.com/54/103419/

三、準備一個可以訪問的真實域名

四、案例

當以上三部完成之后,此時就可以進入配置我們自己的業(yè)務代碼了

4.1、組織APP支付時的支付訂單信息

?php

require_once (__DIR__.'/alipay-sdk-PHP-20171023143822/AopSdk.php');

class Alipay
{
 /**
 * 應用ID
 */
 const APPID = '你的應用ID';
 /**
 *請?zhí)顚戦_發(fā)者私鑰去頭去尾去回車,一行字符串
 */
 const RSA_PRIVATE_KEY = '應用對應開發(fā)者私鑰';
 /**
 *請?zhí)顚懼Ц秾毠€,一行字符串
 */
 const ALIPAY_RSA_PUBLIC_KEY = '支付寶提供的公鑰';
 /**
 * 支付寶服務器主動通知商戶服務器里指定的頁面
 * @var string
 */
 private $callback = "http://www.test.com/notify/alipay_notify.php";

 /**
 *生成APP支付訂單信息
 * @param string $orderId 商品訂單ID
 * @param string $subject 支付商品的標題
 * @param string $body 支付商品描述
 * @param float $pre_price 商品總支付金額
 * @param int $expire 支付交易時間
 * @return bool|string 返回支付寶簽名后訂單信息,否則返回false
 */
 public function unifiedorder($orderId, $subject,$body,$pre_price,$expire){
 try{
  $aop = new \AopClient();
  $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
  $aop->appId = self::APPID;
  $aop->rsaPrivateKey = self::RSA_PRIVATE_KEY;
  $aop->format = "json";
  $aop->charset = "UTF-8";
  $aop->signType = "RSA2";
  $aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY;
  //實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.pay
  $request = new \AlipayTradeAppPayRequest();
  //SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務參數(shù)
  $bizcontent = "{\"body\":\"{$body}\"," //支付商品描述
  . "\"subject\":\"{$subject}\"," //支付商品的標題
  . "\"out_trade_no\":\"{$orderId}\"," //商戶網(wǎng)站唯一訂單號
  . "\"timeout_express\":\"{$expire}m\"," //該筆訂單允許的最晚付款時間,逾期將關閉交易
  . "\"total_amount\":\"{$pre_price}\"," //訂單總金額,單位為元,精確到小數(shù)點后兩位,取值范圍[0.01,100000000]
  . "\"product_code\":\"QUICK_MSECURITY_PAY\""
  . "}";
  $request->setNotifyUrl($this->callback);
  $request->setBizContent($bizcontent);
  //這里和普通的接口調用不同,使用的是sdkExecute
  $response = $aop->sdkExecute($request);
  //htmlspecialchars是為了輸出到頁面時防止被瀏覽器將關鍵參數(shù)html轉義,實際打印到日志以及http傳輸不會有這個問題
  return htmlspecialchars($response);//就是orderString 可以直接給客戶端請求,無需再做處理。
 }catch (\Exception $e){
  return false;
 }

 }
}

4.2、支付寶支付成功之后異步回調處理

?php
/**
 * alipay_notify.php.
 * User: lvfk
 * Date: 2017/10/26 0026
 * Time: 13:48
 * Desc: 支付寶支付成功異步通知
 */
include_once (__DIR__.'/../alipay-sdk-PHP-20171023143822/AopSdk.php');

//驗證簽名
$aop = new \AopClient();
$aop->alipayrsaPublicKey = \Comm\Pay\Alipay::ALIPAY_RSA_PUBLIC_KEY;
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");

//驗簽
if($flag){
 //處理業(yè)務,并從$_POST中提取需要的參數(shù)內容
 if($_POST['trade_status'] == 'TRADE_SUCCESS'
 || $_POST['trade_status'] == 'TRADE_FINISHED'){//處理交易完成或者支付成功的通知
 //獲取訂單號
 $orderId = $_POST['out_trade_no'];
 //交易號
 $trade_no = $_POST['trade_no'];
 //訂單支付時間
 $gmt_payment = $_POST['gmt_payment'];
 //轉換為時間戳
 $gtime = strtotime($gmt_payment);

 //此處編寫回調處理邏輯

		//處理成功一定要返回 success 這7個字符組成的字符串,
		//die('success');//響應success表示業(yè)務處理成功,告知支付寶無需在異步通知
 
 }
}

五、遇到的問題

5.1、一直報錯40001=>isv.invalid-signature

為了搞清楚原因,先后多次重新生成應用的RSA2公私密鑰,發(fā)現(xiàn)都沒有作用。最后結合網(wǎng)上資料,才發(fā)現(xiàn),原來是支付寶回調地址notifyUrl不能有 '?' 以及 ?后面加參數(shù)

5.2、支付寶異步通知成功了,但是$_POST為空

這個也花費了一點時間查找,開始做的時候就是遵照支付寶的建議使用HTTS方式請求。但這樣應用后臺一直通知沒有參數(shù)內容。最后才想起來由于我們的應用使用了HTTS雙向認證,這個原因導致支付寶的服務器回調的參數(shù)為空。最后,把回調地址改為了HTTP方式,驗證通過

通過遇到的問題,首先查看支付寶的文檔描述以及支付寶提供的錯誤碼解釋,實在不行就百度或者谷歌,再加上自己不斷測試驗證,最終一定可以解決問題

至此,支付寶APP支付這塊功能完成,其他的APP退款、對賬單等等功能就沒繼續(xù)做,不過按照支付寶官網(wǎng)文檔以及支付寶提供的SDK,集成到自己應用也只是時間問題。

以上這篇php 服務端集成支付寶APP支付實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 支付寶接口開發(fā)集成支付環(huán)境小結
  • PHP后臺微信支付和支付寶支付開發(fā)
  • php支付寶在線支付接口開發(fā)教程
  • php支付寶手機網(wǎng)頁支付類實例

標簽:棗莊 江蘇 大理 廣元 蚌埠 衡水 萍鄉(xiāng) 衢州

巨人網(wǎng)絡通訊聲明:本文標題《php 服務端集成支付寶APP支付實例》,本文關鍵詞  ;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    运城市| 弥渡县| 繁昌县| 韶山市| 荥阳市| 翁牛特旗| 句容市| 内江市| 沭阳县| 旬邑县| 修文县| 荣成市| 道孚县| 辽阳县| 灵川县| 宽甸| 铁岭县| 蒙城县| 郑州市| 陇西县| 历史| 兰坪| 林芝县| 东安县| 新津县| 博白县| 开封县| 濉溪县| 扬州市| 奎屯市| 灌阳县| 四平市| 疏附县| 田阳县| 介休市| 奎屯市| 鞍山市| 普安县| 荥经县| 本溪| 新源县|