支付寶支付開發流程

支付寶開發流程

1、首先我們先談談第三方支付
所謂第三方支付就是和一些各大銀行簽約,并具備一定實力和信譽保障的第三方獨立機構提供的交易平臺
目前市面上常見的有支付寶,財付通,網銀,易寶支付等,網站需要實現第三方支付首先應向第三方申請一個賬號并簽署協議,協議生效后第三方支付平臺為其開通在線支付功能。
2、第三方支付的原理

2.1用戶向商城網站發起確認訂單的請求

  2.2商城網站接收到請求保存訂單數據到數據庫或其他存儲介質

  2.3返回訂單確認頁面,頁面上應該顯示訂單金額等信息

  2.4用戶確認支付,發起支付請求。注:支付請求是發送到支付網關(比如支付寶、網銀在線)而不是發送到商城網站。

  2.5顯示支付頁面

  2.6用戶填寫認證信息(賬號密碼等)提交

  2.7這里有兩個步驟一個是扣款成功后頁面跳轉到支付結果頁面(展示給用戶),另一個是支付通知,這兩步沒有先后順序可能同時執行,商城網站接收到支付通知后根據驗證規則驗證信息的有效性,并作出相應的更改操作(例:有效則更改訂單為已付款狀態,無效則記錄非法請求信息)。

  以支付寶為例:如果實現在網站中集成支付寶接口,首先要有一個支付寶賬號,接下來向支付寶申請在線支付業務,簽署協議。協議生效后有支付寶一方會給網站方一個合作伙伴ID,和安全校驗碼,有了這兩樣東西就可以按照支付寶接口文檔開發支付寶接口了,在上圖的幾個步驟中只有4和7兩個步驟在商城與支付網關之間有信息交互。在步驟4中指將數據發送到支付網關(支付寶),在步驟7中是的通知驗證部分,驗證網關請求網站某地址,網站按驗證規則對信息進行驗證記錄并作出響應,我們幾乎在開發任何支付接口時,重點是這兩部分的開發,明白支付接口原理,開發支付接口就不難了。

其實看圖來說,我們所做的很有限,基本在1~3之間,生成訂單數據,然后會通過支付寶內部進行認證(當然其中省略了一些購物車、訂單的步驟),基本一個流程結束。
3、支付寶接口開發
3.1接口簡介與測試
就目前來講,支付寶提供了擔保交易,標準即時到賬,雙功能等幾種接口,只是在功能上有些差異,集成方式都是一樣,以標準及時到賬接口為例,在與支付寶簽署協議后,還需要幾個步驟才能完成集成。

選擇“我要自助集成”接下來會看到的鏈接,點擊下載技術文檔。

  在下載后的文件中有標準支付寶交易服務接口、商家工具、接口集成指南等接文檔,另外還有幾種語言寫的demo.我們可以根據接口文檔按規則全新開發,也可以再demo基礎上修改集成到網站,需要注意的是開發支付接口需要在公網(服務器必須可以通過外網訪問)才可以完成整個調試過程,如果服務器在外網訪問不到,則無法接收到支付通知。


demo中每個文件的作用


create_direct_pay_by_user-php-UTF-8
? │
? ├lib┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈類文件夾
? │ ?│
? │ ?├alipay_core.function.php ┈┈┈┈┈┈支付寶接口公用函數文件
? │ ?│
? │ ?├alipay_notify.class.php┈┈┈┈┈┈┈支付寶通知處理類文件
? │ ?│
? │ ?├alipay_submit.class.php┈┈┈┈┈┈┈支付寶各接口請求提交類文件
? │ ?│
? │ ?└alipay_md5.function.php┈┈┈┈┈┈┈支付寶接口MD5函數文件
? │
? ├log.txt┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈日志文件
? │
? ├alipay.config.php┈┈┈┈┈┈┈┈┈┈┈┈基礎配置類文件
? │
? ├alipayapi.php┈┈┈┈┈┈┈┈┈┈┈┈┈┈支付寶接口入口文件
? │
? ├notify_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈服務器異步通知頁面文件
? │
? ├return_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈頁面跳轉同步通知文件
? │
? ├cacert.pem ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈用于CURL中校驗SSL的CA證書文件
? │
? └readme.txt ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈使用說明文本

這里已經下載好了(見資源目錄pay文件夾),為了便于調試增加修改了若干文件,并增加了一張數據表保存訂單信息,我們修改一下配置文件完成一個測試過程。

  alipay_config.php是基礎信息配置文件,我們需要將在支付寶后臺獲取的PID與Key寫入到配置文件中。


  配置項:


 其中方框內的數據是我們需要重點修改的。支付通知地址與返回地址的區別,前面已經提到,在步驟7中有兩項:支付結果頁面與支付通知信息,支付結果頁面是用戶支付完成后會自動跳轉到這個地址這里是返回地址($return_url)。



?$host = $_SERVER['HTTP_HOST'];
//↓↓↓↓↓↓↓↓↓↓請在這里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//合作身份者ID,簽約賬號,以2088開頭由16位純數字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
$alipay_config['partner'] = '****************';


//收款支付寶賬號,以2088開頭由16位純數字組成的字符串,一般情況下收款賬號就是簽約賬號
$alipay_config['seller_id'] = $alipay_config['partner'];


// MD5密鑰,安全檢驗碼,由數字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
$alipay_config['key'] = '****************************';


// 服務器異步通知頁面路徑 ?需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
$alipay_config['notify_url'] = "http://".$host."/paycallback/notify";


// 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
$alipay_config['return_url'] = "http://".$host."/paycallback/return";

// 客戶端的IP地址 非局域網的外網IP地址,如:221.0.0.1
$alipay_config['exter_invoke_ip'] = "182.92.27.46";



 支付通知地址同樣是用戶支付完成后,支付寶會請求該地址($notify_url),但是支付通知是支付寶服務器直接請求,不會被用戶看到。這兩個地址必須是以http開頭的完整路徑格式為了完成測試過程,這里已經將/pay/alipay/notify_url.php改寫,將$notify_url設置為可訪問到此文件的URL即可。這幾項配置好后再根據數據庫腳本(pay/orders.sql)創建一張數據表。并根據數據庫的配置信息修改mysql_config.php.通過對支付寶提供的demo做簡單修改就可以完成創建支付請求(步驟4)了,這里更改了支付首頁等頁面(見源碼包pay目錄)。我們先測試一下:




 數據庫中增加了一條“訂單信息”.

  如果點擊“確認支付”按鈕或者確認支付 鏈接將會跳轉到支付寶頁面,點擊按鈕時通過表單POST方式將信息提交到支付網關,由于支付請求數據無需讓用戶看到,這里都寫在隱藏域中了。確認支付 鏈接是通過URL傳參,因為支付寶接口允許以POST或者GET方式提交,所以兩種方式都可以。把參數提交給支付網關后,頁面跳轉到到支付頁面。我們看到如下圖所示:



 我們看到支付寶為我們提供了兩種支付方式,一種是通過支付寶賬戶支付,另一種是通過銀行卡支付。例如選擇使用銀行卡支付,填寫郵箱或手機號跳轉到如下頁面:



 我們開單支付寶幾乎支持所有的銀行卡支付,同時有信用卡和網點方式付款,選擇對應的銀行下一步按提示付款即可。付款完成后頁面會返回到我們在配置文件中配置的$return_url地址,同時“訂單狀態”也會發生改變。



注:測試時如果沒有在外網測試(即支付通知地址無法在外網訪問)則支付通知無法被請求到,無法自動完成訂單狀態的修改。

  3.2支付寶接口規范與代碼分析

  支付寶接口規范可參考/pay/doc/標準支付寶交易服務接口(專用于防釣魚網站)。Pdf,里面已經有了比較詳細的說明。

  3.2.1如何創建支付請求

  在前面的測試中我們點擊了“確認支付”將信息將信息提交到了支付寶的支付網關,我們可以思考一下應該發送哪些參數給支付網關。關于請求參數列表可以參考標準支付寶交易服務接口(專用于防釣魚網站)。Pdf中的3.2.2.需要注意的是并不是我們把這些參數原封不動的提交到支付寶就可以了,為了保證數據安全支付寶目前使用的是MD5簽名防止數據篡改機制。

  在提交數據前需要將需要提交的數據以一定規則(見接口文檔)組裝成字符串,加上安全校驗碼(Key)組成一個新字符串,通過MD5生成一個32字節的簽名,我們提交支付請求時還需要把這個簽名也提交過去。看一下表單源碼


 支付寶接收到參數后會進行驗證請求參數的合法性,驗證無誤后將顯示支付頁面,否則提示錯誤。

  3.2.2 如何驗證支付通知

  在用戶支付完成后,支付寶會請求網站支付通知地址(這個地址應在創建支付請求時作為參數傳遞過去)。返回參數列表參見標準支付寶交易服務接口(專用于防釣魚網站)。Pdf3.3.1.支付寶的返回數據中同樣有一個簽名串(采取和支付請求同樣的簽名方式),在支付通知文件中首先要對數據進行簽名驗證。除了驗證簽名,還需要將參數中的notify_id提交到支付寶的驗證網關支付寶系統這個通知的真實性,通知驗證。支付寶系統判斷通知是否是自己發送,如果是以字符串格式返回 true,否則返回false,我們通過驗證服務器返回的數據驗證請求的真實性,如果都驗證通過則可以進行更改訂單數據、給用戶發送郵件通知等操作。關于驗證簽名可以看一下通知文件中的源碼。帶demo中將參數中的notify_id提交到支付寶是通過POST方式提交并取得返回數據,代碼片段:



重點就是fsockopen函數,在發送電子郵件時我們已經接觸過,通過此函數打開套接字連接,類似于以前學過的fopen函數返回的是一個文件句柄,之后可以使用文件函數( fgets()、fgetss()、fputs()、fclose() feof()等)對其進行操作,代碼中使用了fputs()(同fwrite())函數,寫入數據來模擬表單以POST方式提交數據,最后通過fgets()函數獲取返回的數據保存到數組中,最后進行驗證,具體參照源碼。




轉載自?http://blog.csdn.net/chajinglong/article/details/55209802

可參考?http://blog.csdn.net/xxssyyyyssxx/article/details/52822267

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282539.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282539.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282539.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MQ消息隊列之MSMQ

主要參考文章: 消息隊列(Message Queue)簡介及其使用 轉載于:https://www.cnblogs.com/mailaidedt/p/6599130.html

css選擇器總結

一.選擇器 1. css1選擇器 2.css2選擇器 3.css3選擇器 4.:nth-of-type(n)和:nth-child(n)區別 (1).在不指定類型時,nth-child(n)選中的是父元素下的第N個子元素。nth-of-type(n)選中的是父元素下的不同類型標簽的第N個。(2).在指定具體元素時,ele:nth-child(n)要求不…

Hypercrx:開源項目不只有Star

01戰隊簡介大家好,我們是Hypercrx戰隊,非常榮幸獲得了首屆Microsoft Edge瀏覽器開拓者大賽的一等獎!我是隊長唐燁男(中),位于我左側的是寧志成,右側的是林以任,我們都來自華東師范大…

《Python編程快速上手 讓繁瑣工作自動化》pdf

<div id"article_content" class"article_content tracking-ad" data-mod"popu_307" data-dsm"post"> <p><br></p><p>下載地址&#xff1a;<a target"_blank" href"https://page74.c…

PHP上傳圖片到數據庫,并進行顯示

1、創建數據表 CREATE TABLE ccs_image (id int(4) unsigned NOT NULL auto_increment,description varchar(250) default NULL,bin_data longblob,filename varchar(50) default NULL,filesize varchar(50) default NULL,filetype varchar(50) default NULL,PRIMARY KEY (id)…

Keras版Faster-RCNN代碼學習(IOU,RPN)1

最近開始使用Keras來做深度學習&#xff0c;發現模型搭建相較于MXnet, Caffe等確實比較方便&#xff0c;適合于新手練手&#xff0c;于是找來了目標檢測經典的模型Faster-RCNN的keras代碼來練練手&#xff0c;代碼的主題部分轉自知乎專欄Learning Machine&#xff0c;作者張瀟捷…

歐拉函數模板

一、單個歐拉函數計算 可評測鏈接&#xff1a;http://codevs.cn/problem/4939/ 單個歐拉函數計算公式&#xff1a;φ&#xff08;n&#xff09;n*&#xff08;1-1/p1&#xff09;*&#xff08;1-1/p2&#xff09;*……*&#xff08;1-1/pn&#xff09; Step 1&#xff1a; 一邊…

洛谷P1145 約瑟夫

題目描述 n個人站成一圈&#xff0c;從某個人開始數數&#xff0c;每次數到m的人就被殺掉&#xff0c;然后下一個人重新開始數&#xff0c;直到最后只剩一個人。現在有一圈人&#xff0c;k個好人站在一起&#xff0c;k個壞人站在一起。從第一個好人開始數數。你要確定一個最小的…

.NET 反向代理-YARP

什么是 YARPYARP (另一個反向代理) 設計為一個庫&#xff0c;提供核心代理功能&#xff0c;你可以根據應用程序的特定需求進行自定義。YARP 是使用 .NET的基礎架構構建在 .NET上的。YARP 的主要不同之處在于&#xff0c;它被設計成可以通過 .NET 代碼輕松定制和調整&#xff0c…

JavaScript 開發的45個經典技巧

2019獨角獸企業重金招聘Python工程師標準>>> 前言&#xff1a;此篇譯文在各網站均有標注原創的聲明&#xff0c;譯者名字已不可考&#xff0c;暫為佚名 JavaScript是一個絕冠全球的編程語言&#xff0c;可用于Web開發、移動應用開發&#xff08;PhoneGap、Appcelera…

PHP循環輸出二維數組

目的: 將二維數組中的每一個元素輸出 首先定義一個二維數組 //定義數組 $arr array(array(北京,上海,深圳,廣州),array(黑龍江,吉林,遼寧,江蘇) ); 一 for循環輸出 1.1 直接輸出 //for循環遍歷數組 for($i 0; $i < count($arr); $i) {for($j 0; $j < count($arr[…

回歸遠程 - 云原生IDE是IaC從表象觸達本質的必然選擇 | SmartIDE

作者&#xff1a;徐磊&#xff0c;開源云原生SmartIDE創始人、LEANOSFT創始人/首席架構師/CEO&#xff0c;微軟最有價值專家MVP/微軟區域技術總監Regional Director&#xff0c;華為云最有價值專家。從事軟件工程咨詢服務超過15年時間&#xff0c;為超過200家不同類型的企業提供…

android獲取手機機型、廠商、deviceID基本信息

/*** 系統工具類*/ public class SystemUtil {/*** 獲取當前手機系統語言。** return 返回當前系統語言。例如&#xff1a;當前設置的是“中文-中國”&#xff0c;則返回“zh-CN”*/public static String getSystemLanguage() {return Locale.getDefault().getLanguage();}/***…

題目1362:左旋轉字符串(Move!Move!!Move!!!)

題目1362&#xff1a;左旋轉字符串&#xff08;Move!Move!!Move!!!&#xff09; 時間限制&#xff1a;2 秒 內存限制&#xff1a;32 兆 特殊判題&#xff1a;否 提交&#xff1a;2306 解決&#xff1a;961 題目描述&#xff1a;匯編語言中有一種移位指令叫做循環左移&#xff0…

PHP簡單實現遞歸

//遞歸 //斐波那契數列 function digui($n) {if($n > 2) {$arr[$n] digui($n-1) digui($n-2);return $arr[$n];} else {return 1;} }//使用 echo digui(5); 總結 : 首先應該想到出口是什么,將出口放在else條件里 例如,本例斐波那契數列中,出口是前兩個數是1,也就是數組下…

(三)Controller接口控制器詳解(二)

一、AbstractController&#xff08;簡單控制器&#xff09; AbstractController使用方法&#xff1a; 首先讓我們使用AbstractController來重寫第二章的HelloWorldController&#xff1a; public class HelloWorldController extends AbstractController {Overrideprotected M…

[BZOJ]1095 Hide捉迷藏(ZJOI2007)

一道神題&#xff0c;兩種神做法。 Description 捉迷藏 Jiajia和Wind是一對恩愛的夫妻&#xff0c;并且他們有很多孩子。某天&#xff0c;Jiajia、Wind和孩子們決定在家里玩捉迷藏游戲。他們的家很大且構造很奇特&#xff0c;由N個屋子和N-1條雙向走廊組成&#xff0c;這N-1條走…

Spring4-自動裝配Beans-通過注解@Autowired在構造方法上

1.創建Maven項目,項目名稱springdemo19,如圖所示2.配置Maven,修改項目中的pom.xml文件,修改內容如下<project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://mave…

15個開源的工業軟件

出品 | OSC開源社區&#xff08;ID&#xff1a;oschina2013)不同的工業流程&#xff0c;需要不同的工業軟件。此前&#xff0c;我們已經介紹了面向研發設計環節的開源軟件&#xff08;詳情查看&#xff1a;20 個開源的工業設計軟件&#xff09;&#xff0c;今天就來介紹一下面向…

PHP開發中保證接口安全

模擬客戶端請求:<?php namespace Home\Controller; use Think\Controller;class ClientController extends Controller{const TOKEN API;//模擬前臺請求服務器api接口public function getDataFromServer(){//時間戳$timeStamp time();//隨機字符串$randomStr $this ->…