商戶網站使用第三方支付的大致原理和實現

如果把商戶網站使用第三方支付平臺(比如支付寶)的原理搞清楚,那編程就變得簡單多了。


整個過程大致這樣:

?

1、商戶與支付寶簽約。
2、在商戶網站購買商品,填寫數量,確定購買后跳轉到結賬頁面。結賬頁面可能包括訂單號、定單狀態(已支付/未支付)、收貨人信息、配送方式、定單金額、配送費用、總金額、支付方式、結賬按鈕,等等。
3、當點擊"結賬"按鈕,會重定向到支付寶付款頁面。而在后臺,實際上是把數據提交到支付寶一個接收支付信息的網關,比如是http://www.zhifubao.com:6060/AliPay/PayGate.ashx,然后再重定向到支付寶付款頁面。
4、付款成功后,重定向到商戶用來顯示支付成功的一個頁面,該頁面可以顯示定單編號、總金額等信息。


其中有幾個關鍵之處:

?

1、明確支付寶支付網關所需要的url格式

?

比如類似"http://www.zhifubao.com:6060/AliPay/PayGate.ashx?partner=18&return_url=http%....%"這樣的格式,那么,編程的時候應該嚴格按照這種格式來拼接字符串。

?

2、明確在支付寶支付成功后重定向到商戶支付成功頁的url中,支付寶給我們反饋的url參數

?

支付寶反饋的格式類似"http://localhost:1746/Shop/PayCallBack.aspx?out_trade_no=222&returncode=ok&total_fee=400&sign=ddddddd+md5值"這樣,我們可以使用Request[key],取出對應的部分,比如定單編號,定單金額,等等。

?

3、在向支付寶網關提交數據的時候,支付寶要求其中一個參數sign必須是MD5值

?

這個MD5值是把商戶編號、支付成功顯示頁面、商戶密匙等信息按照固定的順序進行MD5加密獲得。商戶密匙一般都可以在支付寶后臺設置。

?

4、在支付寶支付成功后重定向到商戶支付成功頁的url中,有一個sign參數也包含了MD5值

?

這個MD5值是把定單編號、返回地址、總金額、商戶密匙等信息按照固定的順序進行MD5加密獲得,編碼的時候,我們需要重新根據定單編號、返回地址、總金額、商戶密匙等信息按照固定的順序進行MD5加密獲得一個值,兩個值比較,如果相等,就說明沒有篡改,支付成功。

?

5、明確支付寶支付網關地址

?

這個地址用來接收來自商戶的信息,類似這樣:http://www.zhifubao.com:6060/AliPay/PayGate.ashx?partner=18&return_url=http%....%


支付寶接口提供的信息大致如下:

?

支付網關地址:

?

http://www.zhifubao.com:6060/AliPay/PayGate.ashx

?

支付網關參數:

?

Partner:商戶編號
return_url:支付成功地址
subject:商品名稱
body:商品描述
out_trade_no:訂單號,由商戶網站生成
total_fee:總金額
seller_email:賣家郵箱
sign:數字簽名,總金額、商戶編號、訂單號、商品名稱、商戶密匙順序連接獲得的MD5值

?

回調商戶地址:

?

out_trade_no:訂單號
returncode:返回碼,ok或error
total_fee:支付金額
sign:數字簽名,訂單號、返回碼、支付金額、商戶密匙順序連接獲得的MD5值

?

搞清了原理,編碼變得簡單。

?

當點擊支付:

?

string md5Str = SomeCommonHelper.GetMD5("總金額","商戶編號","訂單號","商品名稱","商戶密匙");
string url = "http://www.zhifubao.com:6060/AliPay/PayGate.ashx?partner=商戶編號&return_url=" + Server.UrlEncode("http://...商戶支付成功顯示頁面") + "&subject=" + Server.UrlEncode(商品名稱) + "&body=" + 商品描述 + "&out_rade_no=" + 商品編號 + "&total_fee=" + 總金額 + "&seller_email=" + 商戶郵箱 + "&sign=" + md5Str;
Response.Redirect(url);
 

?

支付成功顯示頁面:

?

string out_trade_no = Request["out_trade_no"];
string returncode = Request["returncode"];
string total_fee = Request["total_fee"];
string sign = Request["sign"];
//自己算MD5值
string myMD5 = SomeCommonHelper.GetMD5(out_trade_no + returncode + total_fee + "商戶密匙");
if(sign != myMD5){
    Response.Write("支付失敗");
} else{
    Response.Write("支付成功");
}
 

?

就這樣。

轉載于:https://www.cnblogs.com/darrenji/p/4390455.html

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

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

相關文章

Awesome Deep Vision

本文轉自:https://github.com/kjw0612/awesome-deep-vision http://jiwonkim.org/awesome-deep-vision/ A curated list of deep learning resources for computer vision, inspired by awesome-php and awesome-computer-vision. Maintainers - Jiwon Kim, Heesoo …

GitHub 新出的 Actions 是什么? 用他做自動測試?

體驗分享 本文一個嘗鮮的體驗分享, 并沒有太復雜的技巧, 做了一個最少代碼的例子展示, 讓每個人都可以把action用起來, 如果路過的大牛有高級技巧請留言分享, 我會補充. 下面正文開始. 是什么? 是一個免費的操作系統容器(Linux/Windows/macOS), 我們可以讓他預裝開發環境(node…

caffe框架翻譯-理解(轉載)

本文轉自: http://dirlt.com/caffe.html http://blog.csdn.net/songyu0120/article/details/468170851 caffe http://caffe.berkeleyvision.org/ 1.1 setup 安裝需要下面這些組件。這些組件都可以通過apt-get獲得。 libgoogle-glog-dev # gloglibgflags-dev # gfla…

賈揚清分享_深度學習框架caffe

本文轉自: http://www.datakit.cn/blog/2015/06/12/online_meet_up_with_yangqing_jia.html http://www.ifight.me/187/ Caffe是一個清晰而高效的深度學習框架,其作者是博士畢業于UC Berkeley的 賈揚清,目前在Google工作。本文是根據機器學習…

iOS多線程理解

在iOS開發中,線程的創建與管理已經被Apple進行了很好的封裝,但是在開發者實際開發中會濫用GCD,導致整個代碼混亂不堪,因此在這里需要對iOS開發中的多線程開發進行整理。 1. 主線程完成耗時操作,會導致UI卡頓,因此耗時…

Java生鮮電商平臺-SpringCloud微服務架構中分布式事務解決方案

Java生鮮電商平臺-SpringCloud微服務架構中分布式事務解決方案 說明:Java生鮮電商平臺中由于采用了微服務架構進行業務的處理,買家,賣家,配送,銷售,供應商等進行服務化,但是不可避免存在分布式事…

批量提取 caffe 特征 (python, C++, Matlab)(待續)

本文參考如下: Instant Recognition with Caffe Extracting Features Caffe Python特征提取 caffe 練習4 —-利用python批量抽取caffe計算得到的特征——by 香蕉麥樂迪 caffe 練習3 用caffe提供的C函數批量抽取圖像特征——by 香蕉麥樂迪 caffe python批量抽…

iOS單例初步理解

iOS單例初步理解 在iOS開發中,系統自帶的框架中使用了很多單例,非常方便用戶(開發者,使用比如[NSApplication sharedApplication] 等),在實際的開發中,有時候也需要設計單例對象,為…

python面向對象之類的成員

面向對象之類的成員 細分類的組成成員 類大致分為兩塊區域: 第一部分:靜態字段 第二部分:動態方法 class Animal:type_name "動物類" # 靜態變量(靜態字段)__feature "活的" # 私有靜態變量…

python元類、反射及雙線方法

元類、反射及雙線方法 元類 print(type(abc)) print(type(True)) print(type(100)) print(type([1, 2, 3])) print(type({name: 太白金星})) print(type((1,2,3))) print(type(object))class A:passprint(isinstance(object,type)) print(isinstance(A, type)) type元類是獲取該…

iOS中的多線程一般使用場景

在IOS開發中為提高程序的運行效率會將比較耗時的操作放在子線程中執行,iOS系統進程默認啟動一個主線程,用來響應用戶的手勢操作以及UI刷新,因此主線程又叫做UI線程。 前面的Blog說明了NSThread以及GCD處理并發線程以及線程安全(線…

iOS中如何優化Cell中圖片的下載性能

在iOS開發中使用最為常見的是UITableView,其中UITabelViewCell中下載圖片,會影響用戶下拉刷新UI,導致卡頓,用戶體驗不好,在這篇blog中,我將以一個例子來說明如何優化UITableView下載圖片 1.使用懶加載方式&#xff0c…

【Yoshua Bengio 親自解答】機器學習 81 個問題及答案(最全收錄)

本文轉自:http://mp.weixin.qq.com/s?__bizMzI3MTA0MTk1MA&mid401958262&idx1&sn707f228cf5779a31f0933af903516ba6&scene1&srcid0121zzdeFPtgoRoEviZ3LZDG#rd 譯者:張巨巖 王婉婷 李宏菲 戴秋池 這是 Quora 的最新節目&#xf…

Java生鮮電商平臺-SpringCloud微服務架構中網絡請求性能優化與源碼解析

Java生鮮電商平臺-SpringCloud微服務架構中網絡請求性能優化與源碼解析 說明:Java生鮮電商平臺中,由于服務進行了拆分,很多的業務服務導致了請求的網絡延遲與性能消耗,對應的這些問題,我們應該如何進行網絡請求的優化與…

XCode7 創建framework

1.新建一個靜態庫工程. file→ new→ project, 彈出框中選擇iOS→ framework & library中的cocoa touch static library.點擊Next,輸入product name: TestFramework, 點擊Next→ 點擊Create. 2.刪除向導所生成工程中的Target. 點擊工程名→ 點擊TARGETS → 右鍵Delete. …

基礎js逆向練習-登錄密碼破解(js逆向)

練習平臺:逆向賬號密碼 https://login1.scrape.center/ 直接打開平臺,輸入密碼賬號,抓包找到加密的參數攜帶的位置,這邊我們找到的是一個叫token的加密參數,這個參數的攜帶是一個密文 我們首先考慮一下搜索這個加密的…

python之socket

socket套接字 什么叫socket socket是處于應用層與傳輸層之間的抽象層,他是一組操作起來非常簡單的接口(接受數據)此接口接受數據之后,交由操作系統.socket在python中就是一個模塊. socket兩個分類 基于文件類型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件…

iOS----JSON解析

在iOS開發中與服務器進行數據交互操作,操作過程中使用最為常見的格式為JSON與XML,其中JSON較為清量,因此本篇blog就講解一下如何在iOS中進行JSON解析。 1.建立HTTP請求 (1)創建URL NSString *URLStr [NSString stringWithFormat:”http:/…

VS中每次改代碼后運行程序不更新,只有重新編譯才生效。

解決方法:將項目移除解決方案,再重新添加進來,即添加->現有項目->選擇.vcxproj文件,即可解決。 轉載于:https://www.cnblogs.com/Gregg/p/11358711.html