摘要:支付平臺支付成功后,會往網站的某個回調發送數據。回調接收數據并根據隊則,生成檢驗串,并判斷合法性。返回散列值字符串。
基本介紹
用途廣泛,很多網站都繼承了在線支付功能,如paypal,網銀在線,易寶支付,支付寶,快錢等第三方平臺.
原理基本上,每個銀行都有自家的支付接口,為什么不直接連接到銀行的接口去支付,而需要通過第三方支付?
銀行眾多,每家的銀行用的技術不一樣,比如招行使用.net,農行使用java。
提供的支付地址和支付的接口參數不同.
如果直接提供銀行接口,則需要針對不同銀行開發不同的支付程序,而且要與銀行分別簽訂合同.
第3方支付平臺充當了一個什么角色?
給用戶提供一個統一的支付接口.
e.g 網銀在線的chinabank.
作為網站開發方,只需要和chinabank簽訂協議,支付時,只需要針對chinabank提供的接口來操作即可.
提交支付(本站) ---> 第三方支付平臺 --> 銀行站點 --> 第三方支付平臺 --> 本站
網銀 和 銀行 之間并不需要去做處理.
支付過程:
先POST發送給 第三方支付平臺 信息, 如:訂單號,總金額,商戶號
返回過程:
第三方支付平臺POST給本站 信息
如:支付結果,支付金額...
使用到的知識點
提交表單 和 接收表單
支付過程的問題如何確認表單是否正確
如何確認金額是否被篡改
所有的加密平臺都是通過:密鑰 + 加密 的方式來防偽.
作為開發者,需要完成的事情是:防偽 和 處理表單
防偽確認數據的合法:
利用md5加密的不可逆性,通過特殊的密鑰,雙方來對比md5加密后的字符串,密鑰只有開發者和第三方平臺知曉.
方式:
數字證書
md5(密鑰+字段)
**支付表單處理** 總金額: 123 訂單號: 234 ... ... 在發送如上信息的同時,再把`字段拼接+密鑰 通過md5()` [那些字段拼接,看第三方文檔要求] 同時把md5()的計算結果一起發送到平臺.支付處理表單
提交
/********** 在線支付 md5加密 **********/ // 訂單總金額 幣種 訂單編號 商戶編號 回調地址 密鑰 // v_amonut v_moneytype v_oid v_mid v_url key // 中間不允許有空格 $v_amonut = $total; $v_moneytype = "CNY"; $v_oid = $order_sn; $v_mid = "1009001"; // 20272562 $v_url = "http://www.bool.com/recive.php"; // 回調url $key = "#(%#WU)(UFGDKJGNDFG"; // 密鑰 $v_md5info = strtoupper(md5($v_amonut . $v_moneytype . $v_oid . $v_mid . $v_url . $key)); /********** 在線支付 md5加密 **********/
返回
/* Array ( [v_oid] => OI20161211743801 [v_pstatus] => 20 [v_pstring] => 支付完成 [v_pmode] => 工商銀行 [v_md5str] => 658B07BD92E0F3D259C8EED69982856D [v_amount] => 42 [v_moneytype] => CNY [remark1] => [remark2] => ) */ // v_oid v_pstatus v_amount v_moneytype key 組成 $v_oid = $_POST["v_oid"]; $v_pstatus = $_POST["v_pstatus"]; $v_amount = $_POST["v_amount"]; $v_moneytype = $_POST["v_moneytype"]; $key = "#(%#WU)(UFGDKJGNDFG"; $v_md5str = $_POST["v_md5str"]; $md5info = strtoupper( md5($v_oid . $v_pstatus . $v_amount . $v_moneytype . $key) ); // 對比 計算后的 md5info 和 表單中的 v_md5str if ( $md5info != $v_md5str ) { // 支付失敗 $msg = $_POST["v_pstring"]; exit; } // 支付成功 // 執行SQL語句,把訂單號 對應的訂單改為 已支付 echo $_POST["v_oid"];
注意:
接口文檔中,有一處不可照用 -- 即支付接口地址為http://192.162.2.199/pay/index.php
回調地址用IP來寫,不能用localhost, e用IP.
確保別人用的IP能夠訪問到你的機器
在線支付常遇到的問題什么是"掉單"? 怎么引起的?
指在銀行網站在線支付成功后,錢已經從銀行賬戶中扣除,但是,在購物網站上,相應的訂單并沒有轉成已支付狀態,或者充值時,賬戶余額沒有發生變化。
操作方式:
每隔3-4分鐘重新發送一次,直到收到ok為止.
網站確認成功頁面,依然是接收數據,操作訂單。如果成功,返回ok,否則,返回error.
如果是一筆充值業務,雖然無法偽造POST數據發送給payres.php。但是,如果先充值50,并通過控制臺監測對payres.php的發送信息。然后照抄此次的POST的內容,然后惡意提交多次,因此此次的POST的md5info是正確的,導致多次充值。
在充值前,先形成一個充值訂單,
比如:cz201206120987 0 第一次提交: 0 ---> 1, money = money + 50 當再次提交,1 ---> 1, money = money + 50 ....
操作方式:
需要在update之前,先判斷訂單的狀態,是否為已完成支付,如果是已完成,直接提示退出.
其它支付平臺
所有的第3方支付平臺,都有如下關鍵點:
支付網關地址,其實就是把支付信息提供給該地址.
商戶都有一個密鑰,并且,此密鑰和訂單信息配置,生成一個加密串(該加密串賦值檢驗合法性)。
支付平臺支付成功后,會往網站的某個回調URL發送數據。(回調URL接收數據并根據隊則,生成檢驗串,并判斷合法性)。
不同處:
表單提交的表單項不同
拼湊表單字段時,規則不同
再伸出加密串時的函數,未必是md5加密.
MD5信息加密算法
md5加密屬于單向加密
語法:
string md5(string $str [,bool $raw_output = false]) : 計算str的md5散列值
$str: 原始字符串
$raw_output: 可選的raw_output被設置為true,那么md5報文摘要將以16字節長度的原始二進制格式返回。返回以32位字符十六進制數字形式返回散列值 (不常用)
Crypt加密
Crypt加密屬于單向加密
語法:
string crypt(string $str[,string $salt]) 返回一個基于UNIX DES算法或系統上其它可用的代替算法的散列字符串.
$str: 需要的機密的明文
$salt: 加密時的干擾串,是編碼更安全 (鹽分)標準的字符2位
注意:如果加密時沒有加上這個$salt參數,將隨機生成一個干擾串,否則刷新加密密文不變。
Sha1加密
Sha1加密屬于單向加密
語法:
string sha1(string $str[,bool $raw_output = false]) : 計算字符串的sha1散列值
$str: 加密的字符串
$raw_output: 如果可選的raw_output參數被設置為true,那么sha1摘要將以20字符長度的原始格式返回,否則返回值是一個40字符長度的十六進制數字。
返回sha1散列值字符串。
URL編碼加密
urlencode(string $str): 編碼URL字符串
$str: 要編碼的字符串
返回值: 返回編碼后的字符串
urldecode(string $str):解碼已編碼的URL字符串
返回值:返回解碼后的字符串
編碼規范:此字符串中除了-_.之外的所有非字母數字字符都將被替換成百分號(%)后面跟兩位十六進制,空格則編碼為加號(+)
rawurlencode(sting $str): 按照RFC1738對URL進行編碼
$str:要編碼的URL
返回值:返回字符串,把空格編碼為%20
rawurldecode(string $str): 對已編碼的URL字符串進行編碼
$str: 要解碼的URL
返回值:返回字符串,此字符串中百分號%后跟兩位十六進制的序列都將別替換成原義字符
Base64
數據編碼的作用.
base64_encode(string $data): 使用base64對data進行編碼
$data: 要編碼的數據
base64_decode(string $data[, bool $strict=false]): 對使用MIME base64編碼的數據進行解碼
$strict: 如果輸入的數據超出了base64字母表,則返回false
信息加密技術
單項散列加密
單項散列加密是指通過對不同輸入長度的信息進行散列計算,得到固定長度的輸出,這個是散列計算過程是單向的,即不能對固定長度的輸出進行計算從而獲得輸入信息。
對稱散列加密
對稱加密是指加密和解密使用的密鑰是同一個密鑰或者可以互相推算。
非對稱散列加密
密鑰特定的公開
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/22137.html
摘要:目前常量的含義及時到賬接口,主要用于網站支付手機網站支付接口,主要用于手機瀏覽器移動支付接口,主要用于原生調用方式非常統一,傳入的參數也被最大程度的統一化。 payment 項目2.0版本 前面已經說完了 PHP接入支付寶 即時到帳接口 回調接口也已經完成。這篇主要講 手機網站支付 、 移動支付 接口的調用。調用方式與即時到帳 基本一樣。 關于代碼部分的詳細解釋,請 參看 PHP接入...
摘要:,如果有需要安裝的演示請登陸二當家的查看學生或還沒有工作的童鞋可以無條件享用本站所有素材資源目前包含了支付寶版支付寶版財付通等,這幾個常用的支付平臺,支付方式均為即時到賬,不包含擔保支付。 演示查看:http://www.erdangjiade.com/ph...php給客戶開發網站的時候需要用到各大平臺付款功能,下面就免費分享給大家,此類是個成熟類,網上down下來的,經過修改測試了...
摘要:,如果有需要安裝的演示請登陸二當家的查看學生或還沒有工作的童鞋可以無條件享用本站所有素材資源目前包含了支付寶版支付寶版財付通等,這幾個常用的支付平臺,支付方式均為即時到賬,不包含擔保支付。 演示查看:http://www.erdangjiade.com/ph...php給客戶開發網站的時候需要用到各大平臺付款功能,下面就免費分享給大家,此類是個成熟類,網上down下來的,經過修改測試了...
摘要:,如果有需要安裝的演示請登陸二當家的查看學生或還沒有工作的童鞋可以無條件享用本站所有素材資源目前包含了支付寶版支付寶版財付通等,這幾個常用的支付平臺,支付方式均為即時到賬,不包含擔保支付。 演示查看:http://www.erdangjiade.com/ph...php給客戶開發網站的時候需要用到各大平臺付款功能,下面就免費分享給大家,此類是個成熟類,網上down下來的,經過修改測試了...
閱讀 2211·2021-10-18 13:28
閱讀 2523·2021-10-11 10:59
閱讀 2347·2019-08-29 15:06
閱讀 1140·2019-08-26 13:54
閱讀 817·2019-08-26 13:52
閱讀 3153·2019-08-26 12:02
閱讀 3008·2019-08-26 11:44
閱讀 2519·2019-08-26 10:56