## PHP-支付寶-APP支付
*參考文檔:*
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.5c86Lp&treeId=204&articleId=105297&docType=1
### 第一步:創建應用并獲取APPID
要在您的應用中使用支付寶開放產品的接口能力,您需要先去螞蟻金服開放平臺(open.alipay.com),在管理中心中創建登記您的應用,并提交審核,審核通過后會為您生成應用唯一標識(APPID),并且可以申請開通開放產品使用權限,通過APPID您的應用才能調用開放產品的接口能力。需要詳細了解開放平臺創建應用步驟請參考《開放平臺應用創建指南》。

如果想要有支付功能,該應用必須參加APP支付的功能。
### 第二步:配置密鑰
開發者調用接口前需要先生成RSA密鑰,RSA密鑰包含應用私鑰(APP_PRIVATE_KEY)、應用公鑰(APP_PUBLIC_KEY)。生成密鑰后在開放平臺管理中心進行密鑰配置,配置完成后可以獲取支付寶公鑰(ALIPAY_PUBLIC_KEY)。詳細步驟請參考《配置應用環境》。

使用工具生成應用私鑰和公鑰,并設置應用私鑰。
### 第三步:集成并配置SDK
接入移動支付需要集成兩個SDK,客戶端SDK需要集成在商戶自己的APP中,用于喚起支付寶APP并發送交易數據,并在支付寶APP返回商戶APP時獲得支付結果。服務端SDK需要商戶集成在自己的服務端系統中,用于協助解析并驗證客戶端同步返回的支付結果和異步通知。
如何集成客戶端SDK
點擊查看iOS集成流程詳解,Android集成流程詳解。
如何集成服務端SDK
為了幫助開發者調用開放接口,我們提供了開放平臺服務端SDK,包含JAVA、PHP和.NET三語言版本,封裝了簽名&驗簽、HTTP接口請求等基礎功能。請先下載對應語言版本的SDK并引入您的開發工程。
#### 第四步:調用接口

#### 實現步驟:
在這里只對服務端,進行說明,服務端需要實現只有這幾個接口,主要使用官方提供的php sdk。
初始化:
Loader::import('alipay.AopClient', EXTEND_PATH);
$this->aopClient = new \AopClient();
$this->aopClient->appId = config('alipay_config.appid');//應用aapid
$this->aopClient->rsaPrivateKey = config('alipay_config.rsa_private_key');//應用私鑰
$this->aopClient->format = 'json';
$this->aopClient->alipayrsaPublicKey = config('alipay_config.alipay_rsa_public_key');//支付寶公鑰
#### 1. 簽名接口:
用戶在客戶端下單,發起支付請求,先到服務端生成支付簽名,再返回給客戶端調支付寶客戶端進入支付頁面。
~~~
Loader::import('alipay.request.AlipayTradeAppPayRequest', EXTEND_PATH);
//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.open.public.template.message.industry.modify
$req = new \AlipayTradeAppPayRequest();
$req->setNotifyUrl(config('alipay_config.notify_url'));//異步通知接口
$bizCoent = [];
$bizCoent['timeout_express'] = "1d";
$bizCoent['product_code'] = "QUICK_MSECURITY_PAY";//產品編碼,固定
$bizCoent['total_amount'] = $sum_pay;
$bizCoent['subject'] = ‘標題’;
$bizCoent['body'] = '訂單描述';
$bizCoent['out_trade_no'] = $order_num;
$req->setBizContent(json_encode($bizCoent));
//SDK已經封裝掉了公共參數,這里只需要傳入業務參數
$response = $this->aopClient->sdkExecute($req);//生成簽名
~~~
#### 2. 客戶端同步通知:
當用戶支付成功后,調用該接口通知系統支付成功,并做一些訂單信息的修改,但是這個接口無法保證一定會成功執行,主要是輔助后臺異步通知。
該接口由支付成功后調用:
~~~
$param = json_decode(post('pay_result'),true);//參考支付寶【客戶端同步】接口
if ($param['resultStatus'] == 9000) {//交易成功
//支付成功,驗證訂單信息,驗證簽名,修改訂單信息
} else {
log_error("支付寶同步通知失敗", '狀態碼:' . $param['resultStatus'] . '|' . $param['memo']);
}
~~~
#### 3. 后臺異步通知
當支付成功后,異步調用該接口通知系統訂單支付成功,這個接口是可信任的,當你沒有返回“success”時,支付寶會在一天內定時調用8次。
該接口由支付寶通過簽名設置的notify_url調起:
~~~
$param=$_POST;//接受post數據,參考【支付結果異步通知】
$res=$this->aopClient->rsaCheckV1($param);
if(!$res){
log_error("支付寶notify通知",$param['out_trade_no']."參數驗證失敗");
return error("參數驗證失敗");
}
f($param['trade_status']=='TRADE_SUCCESS'||$param['trade_status']=='TRADE_FINISHED'){
return $this->updateOrder($param['out_trade_no'],$param['trade_no'],1,$param['total_amount'] );
}else if($param['trade_status']=='TRADE_CLOSED'){//交易關閉,把訂單改為已撤銷
return $this->cacelOrder($param['out_trade_no']);//取消訂單
}else{//其他通知類型
return error("未知通知類型");
}
~~~
- 我的筆記
- 服務器
- ubuntu svn 環境的搭建
- ubuntu Memcache 的配置
- ubuntu 密鑰登錄服務器
- centos 搭建服務器環境
- nginx+tomcat 集群搭建
- 餐廳運營來看如何構建高性能服務器
- VMware-Centos-網絡配置
- Ubuntu-PHP-Apache-Mysql-PhpMyadmin的搭建
- UbuntuApache配置日志
- linux獲取當前執行腳本的目錄
- Ubuntu svn的快速配置(原創)
- Https配置
- Mysql 不支持遠程連接解決方案
- ubuntu+apache+rewrite
- php Mcrypt 擴展
- 重啟Apache出現警告信息Could not reliably determine the server's fully qualified domain name,
- Mysql無法遠程連接
- 定時任務設置
- Linux中Cache內存占用過高解決辦法
- Ubuntu14-04安裝redis和php5-redis擴展
- php
- thinkphp3.2 一站多城市配置
- PHP 安全編程建議(轉)
- phpexcel導入時間處理
- Mysql按時,天,月,年統計數據
- PHP-支付寶-APP支付
- 百度爬蟲-獲取全國數據
- PHPEXCEL導入導出excel文件
- php-微信app支付后端設計
- Phpqrcode生成二維碼
- 圖片+文字水印
- 數據庫優化
- java
- Mybatis 二級緩存
- 微信
- 微信公眾號多域名授權
- 微信掃碼支付
- web
- 網站性能優化方案實施
- ionic環境搭建
- 登錄設計方案
- 設置dev元素的寬高比例
- 設計模式
- app
- 版本更新
- 微擎數據庫操作擴展
- select
- find
- delete
- update
- insert
- where
- order
- page
- group
- having
- limit
- fields
- debug
- bind
- join
- alias
- query
- 聚合函數
- count
- sum
- max
- min
- avg
- 事務管理
- 自增自減
- 算法設計
- ACM:入口的選擇------深度優先搜索
- java:N的N次方
- 最少攔截系統:貪心思想
- ACM:蠶寶寶:搜索
- ACM:n!的位數 :斯特林公式
- 神奇的異或
- 中國剩余定理
- 矩陣翻硬幣
- 回溯法
- ACM程序設計網站集錦
- 博弈論
- 多維空間上的搜索算法
- 算法學習筆記之一(排序)
- 算法學習筆記之二(堆排序)
- 算法學習筆記之三(快速排序)
- ACM俱樂部密碼
- 原創開源
- 個人感悟