久久无码中文字幕_日韩精品无码一本二本三_久久精品呦女暗网_欧美一级夜夜爽_久久精品国产99久久99久久久

19
2018/05

技術(shù)型問(wèn)題,支付寶支付成功以后,如何對(duì)返回的數(shù)據(jù)進(jìn)行安全驗(yàn)證?

發(fā)布時(shí)間:2018-05-19 11:29:02
發(fā)布者:pengyifeng
瀏覽量:
0

alipay的支付通知有兩類。異步通知(notify_url)與return_url.前面是post異步通知,后面的return_url 是get返回url只返回一次。

A服務(wù)器通知,對(duì)應(yīng)的參數(shù)為notify_url,支付寶通知使用POST方式 

B頁(yè)面跳轉(zhuǎn)通知,對(duì)應(yīng)的參數(shù)為return_url,支付寶通知使用GET方式 (通知地址不需要像以前一樣去賬戶內(nèi)設(shè)置,而是由客戶在支付的時(shí)候通過(guò)參數(shù)傳遞給我地址)。 

類似 notify_url=http://www.geizy.cn/notify_alipay.php 注意:www.geizy.cn是您網(wǎng)站的域名,也可以用ip地址代替。對(duì)于服務(wù)器通知,ip地址一定是公網(wǎng)的,私有地址獲取不到alipay的返回?cái)?shù)據(jù)

一、 文件結(jié)構(gòu)

1 由兩部分組成,支付接口與支付成功返回接口部分。支付寶快捷支付接口一般為url直接發(fā)起網(wǎng)頁(yè)支付。返回就是支付寶服務(wù)器對(duì)該筆訂單處理完畢后,通知與返回該筆訂單的詳細(xì)信息到你填寫的notify_url地址,服務(wù)器接收到后,對(duì)返回?cái)?shù)據(jù)處理對(duì)應(yīng)訂單狀態(tài)。 

2 以PHP代碼中的程序?yàn)槔?nbsp;

接入部分的頁(yè)面文件包含:配置頁(yè)alipay_Config.php、方法詳細(xì)頁(yè)alipay/Alipay_Payto.php、程序入口頁(yè)index.php以及MD5加密方法類頁(yè)alipayto/Alipay_md5.php。通知返回部分的頁(yè)面文件包含:方法詳細(xì)頁(yè)alipay/Alipay_Payto.php、MD5加密方法類頁(yè)alipayto /Alipay_md5.php、支付完成后(支付寶處理完畢后)自動(dòng)跳轉(zhuǎn)回的自定義頁(yè)面return_Alipay_Notify.php、兩方服務(wù)器間相互交互(無(wú)法直接看到)通知頁(yè)Alipay_Notify.php。  

----------------------------------------------------------------- 

工作原理 

對(duì)結(jié)構(gòu)有所了解之后,就可以開(kāi)始研究具體是如何運(yùn)行的了 

a) 接入部分原理 

i. 第一步——配置文件參數(shù)信息: 

public function config()
{
    $alipay_config = array();

    $alipay_config['partner'] = '2088***********';

//收款支付寶賬號(hào),以2088開(kāi)頭由16位純數(shù)字組成的字符串,一般情況下收款賬號(hào)就是簽約賬號(hào)
   $alipay_config['seller_id'] = '2088***********';

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

// 服務(wù)器異步通知頁(yè)面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問(wèn)
   $alipay_config['notify_url'] = "http://www.geizy.cn/notify_url";

// 頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問(wèn)
   $alipay_config['return_url'] = "http://www.geizy.cn/return_url";

//簽名方式
    $alipay_config['sign_type'] = strtoupper('MD5');

//字符編碼格式 目前支持 gbk 或 utf-8
    $alipay_config['input_charset'] = strtolower('utf-8');

//ca證書路徑地址,用于curl中ssl校驗(yàn)
//請(qǐng)保證cacert.pem文件在當(dāng)前文件夾目錄中
   $alipay_config['cacert'] = getcwd() . '\\cacert.pem';

//訪問(wèn)模式,根據(jù)自己的服務(wù)器是否支持ssl訪問(wèn),若支持請(qǐng)選擇https;若不支持請(qǐng)選擇http
    $alipay_config['transport'] = 'http';

// 支付類型 ,無(wú)需修改
    $alipay_config['payment_type'] = "1";

// 產(chǎn)品類型,無(wú)需修改
    $alipay_config['service'] = "create_direct_pay_by_user";

//↑↑↑↑↑↑↑↑↑↑請(qǐng)?jiān)谶@里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


//↓↓↓↓↓↓↓↓↓↓ 請(qǐng)?jiān)谶@里配置防釣魚信息,如果沒(méi)開(kāi)通防釣魚功能,為空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

// 防釣魚時(shí)間戳  若要使用請(qǐng)調(diào)用類文件submit中的query_timestamp函數(shù)
    $alipay_config['anti_phishing_key'] = "";

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

//↑↑↑↑↑↑↑↑↑↑請(qǐng)?jiān)谶@里配置防釣魚信息,如果沒(méi)開(kāi)通防釣魚功能,為空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    return $alipay_config;
}

配置完成之后,直接調(diào)用封裝好的執(zhí)行代碼: 

a) 以php程序代碼為例: 

        $out_trade_no = $_POST['WIDout_trade_no'];

        //訂單名稱,必填
        $subject = $_POST['WIDsubject'];

        //付款金額,必填
        $total_fee = '0.01';

        //商品描述,可空
        $body = $_POST['WIDbody'];

/************************************************************/

//構(gòu)造要請(qǐng)求的參數(shù)數(shù)組,無(wú)需改動(dòng)
$parameter = array(
      "service"       => $alipay_config['service'],
      "partner"       => $alipay_config['partner'],
      "seller_id"  => $alipay_config['seller_id'],
      "payment_type" => $alipay_config['payment_type'],
      "notify_url"   => $alipay_config['notify_url'],
      "return_url"   => $alipay_config['return_url'],
      
      "anti_phishing_key"=>$alipay_config['anti_phishing_key'],
      "exter_invoke_ip"=>$alipay_config['exter_invoke_ip'],
      "out_trade_no" => $out_trade_no,
      "subject"  => $subject,
      "total_fee"    => $total_fee,
      "body" => $body,
      "_input_charset"   => trim(strtolower($alipay_config['input_charset']))
      
);

//建立請(qǐng)求
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "確認(rèn)");
echo $html_text;

封裝的demo中已經(jīng)將對(duì)應(yīng)的方法封裝成了PHP函數(shù),demo中直接調(diào)用就可以發(fā)起alipay支付請(qǐng)求。

a) 不可缺少的參數(shù) 

i. service服務(wù)參數(shù),這個(gè)是用來(lái)區(qū)別這個(gè)接口是用的什么接口,所以絕對(duì)不能修改。 

ii. partner合作身份者ID、key安全校驗(yàn)碼或稱私鑰這一組參數(shù)是簽約合同生效后才能拿的到,partner是來(lái)鑒別是哪個(gè)商家與支付寶簽約,而這個(gè)Key它如同鑰匙般相當(dāng)重要。

iii. seller_email收款人支付寶賬號(hào),支付寶中有手機(jī)類型、電子郵件類型的支付寶賬號(hào)是都可以用這個(gè)參數(shù)的。 

iv. subject在支付寶的收銀臺(tái)里是直接與商品名稱關(guān)聯(lián)在一起的,但是說(shuō)的更準(zhǔn)確些的話,這個(gè)參數(shù)是這筆交易的名稱,因?yàn)檫@筆交易不一定只買一件商品。它的作用不僅是在收銀臺(tái)里可以清晰的顯示出來(lái),而且在支付寶的賬

-------------------------------------------------------- 

通知返回 

a) 返回頁(yè) 

傳遞給支付寶時(shí)的return_url參數(shù)所對(duì)應(yīng)的頁(yè)面文件。

具備的屬性: 

1、發(fā)起支后,買家已經(jīng)成功付款以后流,頁(yè)面會(huì)自動(dòng)跳轉(zhuǎn)回配置文件中填寫的 return_url 地址中。 

2、支付完成后跳轉(zhuǎn) 

3、參數(shù)以get方式傳輸。 

4、網(wǎng)址只跳轉(zhuǎn)一次,不能重復(fù)跳轉(zhuǎn)。 

b) 通知頁(yè) 

傳遞給支付寶時(shí)的notify_url參數(shù)所對(duì)應(yīng)的頁(yè)面文件 

具備的屬性: 

1、被支付寶調(diào)用才能啟動(dòng)。 

2、服務(wù)器間的傳遞,看不見(jiàn)執(zhí)行操作。 

3、參數(shù)以post方式傳輸。 

4、支付寶中的該筆交易存在,且該筆交易狀態(tài)發(fā)生了變更,就會(huì)被調(diào)用。

5、被調(diào)用程序判斷(if(sign = mysign and responseTxt = true)),若我們自己在該判斷中有做程序編寫,成功則不再被調(diào)用,不成功則會(huì)反復(fù)被調(diào)用。

6、異步的,第一次收到訂單信息(以下都稱之為“通知”)是與返回頁(yè)近乎等同或等同的同步時(shí)間,在判斷不成功的情況下,會(huì)收到第二次第三次等次數(shù)的通知,時(shí)間間隔從最先的一兩分鐘,到后面的幾個(gè)小時(shí)。失效時(shí)間是4

8小時(shí)。 

7、程序必須在服務(wù)器上調(diào)試、運(yùn)行。 

8、程序編寫時(shí)必須采用程序執(zhí)行成功,才寫頁(yè)面echo(“success”);,不成功則寫頁(yè)面echo(“fail”); 支付寶根據(jù)success來(lái)判定是否要重新再次發(fā)送通知該頁(yè)面的Html頁(yè)面中必須是空白、無(wú)任何Html標(biāo)簽、無(wú)任何空格、不允許做頁(yè)面跳轉(zhuǎn)。

返回列表