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