亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用php實(shí)現(xiàn)快錢支付功能(涉及到接口)

 更新時(shí)間:2013年07月01日 10:23:02   投稿:jingxian  
本篇文章是對(duì)使用php實(shí)現(xiàn)快錢支付功能的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

本項(xiàng)目用zend framework框架實(shí)現(xiàn)的modules/default/controllers/IndexController.php
IndexController.php

復(fù)制代碼 代碼如下:

<?php
class IndexController extends Zend_Controller_Action
{
    public function init()
    {
        /* Initialize action controller here */
    }
    public function indexAction()
    { 
     
     /*模擬訂單
      *$MockOrder是從數(shù)據(jù)庫(kù)取出來(lái)的信息,它包含一些塊錢Request的信息。這里我寫死了。
      *orderId訂單號(hào),數(shù)據(jù)庫(kù)表的主鍵(唯一)。    //必要字段
      *usr_idtype證件類型,根據(jù)自己需要。
      *usr_idcode證件號(hào),根據(jù)自己需要。
      *etx_status是否優(yōu)惠,根據(jù)自己需要。
      *time_create驗(yàn)證是否符合優(yōu)惠的時(shí)間,根據(jù)自己需要。
      *ets_license套餐代碼如同商品類別,根據(jù)自己需要。
      *contact_type聯(lián)系方式類型,固定選擇值1,2。1電子郵件,2手機(jī)號(hào),根據(jù)自己需要,塊錢那邊可以為空。
      *contact_text聯(lián)系方式,根據(jù)contact_type來(lái)填寫,根據(jù)自己需要,塊錢那邊可以為空。
      *etsPrice套餐價(jià)格及商品價(jià)格,根據(jù)自己需要。
      *orderPrice實(shí)際價(jià)格,根據(jù)自己需要。
      *orderAmount訂單實(shí)際支付金額,這個(gè)要加手續(xù)費(fèi)的。  //必要字段
      *orderTime訂單時(shí)間。        //必要字段
      *paySuccess訂單是否支付成功。      //必要字段
      *buySuccess賬號(hào)是否生成功,根據(jù)自己需要
      *payTime訂單支付成功時(shí)間。       //必要字段
      *總之凡是跟訂單有關(guān)的都是必要字段
      *orderId、orderAmount、orderTime為 Request所需字段
      *paySuccess、payTime為Response所需字段
      */  
  //BillRequest就是快錢那邊需要的的一些參數(shù)
  $this->view->BillRequest = new Application_Model_BillRequest($MockOrder);
  Zend_Debug::dump($this->view->BillRequest);exit;  
    }
   
    //bgUrl地址指向這里
    public function receiveAction()
    {
     //receive數(shù)據(jù)庫(kù)設(shè)計(jì)
     /*用$MockReceive數(shù)組模擬
      * $MockReceive = array();
      * $MockReceive['id']主鍵;
      * $MockReceive['orderId']商戶訂單號(hào);
      * $MockReceive['receiveTime']接受時(shí)間;
      * $MockReceive['queryString']http_build_encode($_REQUEST);
      * $MockReceive['dealId']快錢交易號(hào);
      * $MockReceive['bankDealId']銀行交易號(hào);
      * $MockReceive['payResult']處理結(jié)果10:支付成功;11:支付失敗;
      * $MockReceive['dealTime']快錢交易時(shí)間;
      * $MockReceive['payAmount']訂單實(shí)際支付金額;
      * $MockReceive['fee']費(fèi)用;
      * $MockReceive['errCode']錯(cuò)誤代碼;
      */
     
  $BillResponse = new Application_Model_BillResponse($_REQUEST);
  //$BillResponse->checkSignMsg驗(yàn)證簽名字符串是否正確,防止bug漏洞等
  if($BillResponse->checkSignMsg){
   //判斷訂單支付是否成功
   if($BillResponse->isSuccess){
    //返回給快錢,快錢會(huì)按照redirecturl地址跳到新頁(yè)面,這里是成功頁(yè)面
    return "<result>1</result><redirecturl>http://99bill/default/index/sucess</redirecturl>";exit;
   }else{
    //返回給快錢,快錢會(huì)按照redirecturl地址跳到新頁(yè)面,這個(gè)是失敗頁(yè)面
    return "<result>1</result><redirecturl>http://99bill/default/index/fail</redirecturl>";exit;
   }
  }
  //返回給快錢,快錢會(huì)按照redirecturl地址跳到新頁(yè)面,這個(gè)是失敗頁(yè)面
  return "<result>1</result><redirecturl>http://99bill/default/index/fail</redirecturl>";exit;
    }
 
    //redirecturl地址
    //成功
    public function success()
    {
   
    }
   
    //失敗
    public function fail()
    {
   
    }
}

modules/default/views/scripts/index/index.phtml
https://www.99bill.com/gateway/recvMerchantInfoAction.htm
復(fù)制代碼 代碼如下:

<?php $BillRequest = (array)$this->BillRequest;?>
<div style="display:none;">
<form name="kqPay" action="https://www.99bill.com/gateway/recvMerchantInfoAction.htm" method="post">
<?php foreach($BillRequest as $key => $val):?>
 <input type="hidden" name="<?php echo $key;?>" value="<?php echo $val;?>"/>
<?php endforeach;?>
 <input type="submit" name="submit" value="提交到快錢" id="kqPay">
</form>
</div>
<script>
document.getElementById('kqPay').click();
</script>

models/BillRequest.php
BillRequest.php
復(fù)制代碼 代碼如下:

<?php
class Application_Model_BillRequest
{
 public function __construct($MockOrder){
  $this->merchantAcctId = "1001011111101";
  //服務(wù)器接收支付結(jié)果的后臺(tái)地址,該參數(shù)務(wù)必填寫,絕對(duì)路徑//不能為空。
  $this->bgUrl = "http://99bill/default/index/receive";
  //商戶訂單號(hào),以下采用時(shí)間來(lái)定義訂單號(hào),商戶可以根據(jù)自己訂單號(hào)的定義規(guī)則來(lái)定義該值//不能為空。
  $this->orderId = 'TOLPC'.sprintf("%09d", $MockOrder['orderId']);
  //訂單金額,金額以“分”為單位,商戶測(cè)試以1分測(cè)試即可,切勿以大金額測(cè)試,該參數(shù)必填//不能為空
  $this->orderAmount =$MockOrder['orderAmount'];
  //訂單提交時(shí)間,格式:yyyyMMddHHmmss,如:20071117020101//不能為空。
  $this->orderTime = date("YmdHis", $MockOrder['orderTime']);
  //支付人姓名,可以為空。
  $this->payerName= "";
  //支付人聯(lián)系類型,1 代表電子郵件方式;2 代表手機(jī)聯(lián)系方式。可以為空。
  $this->payerContactType =  "";
  //支付人聯(lián)系方式,與payerContactType設(shè)置對(duì)應(yīng),payerContactType為1,則填寫郵箱地址;payerContactType為2,則填寫手機(jī)號(hào)碼。可以為空。
  $this->payerContact =  "";
  //商品名稱,可以為空。
  $this->productName= "TOLPC";
  //商品數(shù)量,可以為空。
  $this->productNum = "1";
  //商品代碼,可以為空。
  $this->productId = $MockOrder['ets_license'];
  //商品描述,可以為空。
  $this->productDesc = "";
  //支付方式,一般為00,代表所有的支付方式。如果是銀行直連商戶,該值為10,必填//不能為空
  $this->payType = "00";
  //編碼方式,1代表 UTF-8; 2 代表 GBK; 3代表 GB2312 默認(rèn)為1,該參數(shù)必填//不能為空
  $this->inputCharset = "1";
  //網(wǎng)關(guān)版本,固定值:v2.0,該參數(shù)必填//不能為空
  $this->version =  "v2.0";
  //語(yǔ)言種類,1代表中文顯示,2代表英文顯示。默認(rèn)為1,該參數(shù)必填//不能為空
  $this->language =  "1";
  //簽名類型,該值為4,代表PKI加密方式,該參數(shù)必填//不能為空
  $this->signType =  "4";
  //接收支付結(jié)果的頁(yè)面地址,該參數(shù)一般置為空即可。
  $this->pageUrl = "";
  //擴(kuò)展字段1,商戶可以傳遞自己需要的參數(shù),支付完快錢會(huì)原值返回,可以為空。
  $this->ext1 = $MockOrder['orderId'];
  //擴(kuò)展自段2,商戶可以傳遞自己需要的參數(shù),支付完快錢會(huì)原值返回,可以為空。
  $this->ext2 = $MockOrder['orderTime'];
  //銀行代碼,如果payType為00,該值可以為空;如果payType為10,該值必須填寫,具體請(qǐng)參考銀行列表。
  $this->bankId = "";
  //同一訂單禁止重復(fù)提交標(biāo)志,實(shí)物購(gòu)物車填1,虛擬產(chǎn)品用0。1代表只能提交一次,0代表在支付不成功情況下可以再提交??蔀榭铡?br />  $this->redoFlag = "";
  //快錢合作伙伴的帳戶號(hào),即商戶編號(hào),可為空。
  $this->pid = "";
  
  //快錢提供的request參數(shù)。
  $KeyOrders = array('inputCharset','pageUrl','bgUrl','version','language','signType','merchantAcctId','payerName','payerContactType','payerContact',
   'orderId','orderAmount','orderTime','productName','productNum','productId','productDesc','ext1','ext2','payType','bankId','redoFlag','pid',);
  
  //判斷快錢提供的request參數(shù)的值是否為空,把非空的參數(shù)及值重新組建數(shù)組
  foreach($KeyOrders as $key){
   if(''==$this->{$key}){continue;}
   $params[$key] = $this->{$key};
  }
  //http_build_query()生成URL-encode之后的請(qǐng)求字符串
  //urldecode()還原未編碼的字符串
  //getSignMsg() PKI加密,也可使用MD5加密
  //MD5加密方式  strtoupper(md5(urldecode(http_build_query($params))));這種不常用了。
  //常用PKI加密
  $this->signMsg = $this->getSignMsg(urldecode(http_build_query($params)));
 }
 
 //PKI加密技術(shù)
 
 public function getSignMsg($param){
  //99bill-rsa.pem是快錢的一個(gè)CA證書
  //本地隨機(jī)生成一個(gè)KEY,用此KEY加密數(shù)據(jù) KEY為$priv_key_id
  $priv_key_id = openssl_get_privatekey(file_get_contents("99bill-rsa.pem", "r"));
  //用$priv_key_id給$param數(shù)據(jù)加密。
  //計(jì)算一個(gè)簽名字符串$param通過(guò)使用SHA1哈希加密,隨后$priv_key_id私鑰加密。數(shù)據(jù)本身是不加密的。
  openssl_sign($param, $signMsg, $priv_key_id, OPENSSL_ALGO_SHA1);
  //從存儲(chǔ)器上釋放$priv_key_id
  openssl_free_key($priv_key_id);
  //使用base64對(duì)數(shù)據(jù)進(jìn)行編碼
  return base64_encode($signMsg);
 }
}

models/BillResponse.php
BillResponse.php
復(fù)制代碼 代碼如下:

<?php
class Application_Model_BillResponse
{
 /*
  * __construct()構(gòu)造函數(shù)
  * 生成19個(gè)參數(shù)及值,可能有一個(gè)參數(shù)的值為空,$this->errCode的值可能為空
  */
 public function __construct($response){
  $KeyOrders = array('merchantAcctId','version','language','signType','payType','bankId','orderId','orderTime','orderAmount',
   'dealId','bankDealId','dealTime','payAmount','fee','ext1','ext2','payResult','errCode', 'signMsg');
  foreach($KeyOrders as $key){
   $this->{$key} = $response[$key];
  }
 }
 /*
  * 檢查簽名字符串
  * 快錢返回的簽名字符串是$this->signMsg
  * 使用base64對(duì)前面字符串進(jìn)行解碼
  * 驗(yàn)證使用快錢給的公鑰驗(yàn)證
  * 快錢那邊他們把返回來(lái)的參數(shù)值不為空的使用私鑰加密生成了$this->signMsg
  * 快錢給了我們私鑰對(duì)應(yīng)的公鑰,我們使用這個(gè)公鑰來(lái)驗(yàn)證。1成功,0失敗,-1錯(cuò)誤。
  */
 public function checkSignMsg(){
  $KeyOrders = array('merchantAcctId','version','language','signType','payType','bankId','orderId','orderTime','orderAmount',
   'dealId','bankDealId','dealTime','payAmount','fee','ext1','ext2','payResult','errCode',);
  foreach($KeyOrders as $key){
   if(''==$this->{$key}){continue;}
   $params[$key] = $this->{$key};
  }
  //$pub_key_id 公鑰
  $pub_key_id = openssl_get_publickey(file_get_contents("99bill-rsa.cer", "r"));
  return openssl_verify(urldecode(http_build_query($params)), base64_decode($this->signMsg), $pub_key_id);
 }
 public function isSuccess(){
  //$this->payResult成功時(shí)10,失敗時(shí)11
  return '10'==$this->payResult;
 }
 public function getOrderId(){
  return str_replace('XXX', '', $this->orderId);
 }
}

需要一個(gè)公鑰和一個(gè)私鑰,這個(gè)不是一對(duì)的
都是一半
99bill-rsa.cer
99bill-rsa.pem

相關(guān)文章

  • php頁(yè)面跳轉(zhuǎn)代碼 輸入網(wǎng)址跳轉(zhuǎn)到你定義的頁(yè)面

    php頁(yè)面跳轉(zhuǎn)代碼 輸入網(wǎng)址跳轉(zhuǎn)到你定義的頁(yè)面

    我先判斷一下你是否開啟了https,如果是就正常的https頁(yè)面,如果沒有開始則跳轉(zhuǎn)到項(xiàng)目的目錄下面,感興趣的朋友可以參考下哈,希望對(duì)你有所幫助
    2013-03-03
  • PHP中preg_match函數(shù)正則匹配的字符串長(zhǎng)度問(wèn)題

    PHP中preg_match函數(shù)正則匹配的字符串長(zhǎng)度問(wèn)題

    這篇文章主要介紹了PHP中preg_match函數(shù)正則匹配的字符串長(zhǎng)度問(wèn)題,如果你也遇到了preg_match正則提取內(nèi)容時(shí)總是空白或提取不到的話,那就可能是遇到了這個(gè)問(wèn)題啦,需要的朋友可以參考下
    2015-05-05
  • PHPUnit PHP測(cè)試框架安裝方法

    PHPUnit PHP測(cè)試框架安裝方法

    PHPUnit是一個(gè)輕量級(jí)的PHP測(cè)試框架。它是在PHP5下面對(duì)JUnit3系列版本的完整移植,是xUnit測(cè)試框架家族的一員(它們都基于模式先鋒Kent Beck的設(shè)計(jì))。
    2011-03-03
  • PHP中STDCLASS用法實(shí)例分析

    PHP中STDCLASS用法實(shí)例分析

    這篇文章主要介紹了PHP中STDCLASS用法,結(jié)合實(shí)例形式分析了PHP中STDCLASS的功能、原理、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-11-11
  • PHP排序算法之希爾排序(Shell Sort)實(shí)例分析

    PHP排序算法之希爾排序(Shell Sort)實(shí)例分析

    這篇文章主要介紹了PHP排序算法之希爾排序(Shell Sort),結(jié)合實(shí)例形式較為詳細(xì)的分析了希爾排序的原理、實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • Thinkphp事務(wù)操作實(shí)例(推薦)

    Thinkphp事務(wù)操作實(shí)例(推薦)

    下面小編就為大家?guī)?lái)一篇Thinkphp事務(wù)操作實(shí)例(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • PHP中的命名空間詳細(xì)介紹

    PHP中的命名空間詳細(xì)介紹

    這篇文章主要介紹了PHP中的命名空間詳細(xì)介紹,本文講解了命名空間(namespace)的概念、正在使用命名空間、定義命名空間、子命名空間、從命名空間中調(diào)用代碼等內(nèi)容,需要的朋友可以參考下
    2015-07-07
  • php 8小時(shí)時(shí)間差的解決方法小結(jié)

    php 8小時(shí)時(shí)間差的解決方法小結(jié)

    前幾天發(fā)現(xiàn)一個(gè)問(wèn)題 date("Y-m-d G:i T",time()) 取出來(lái)的時(shí)間和本地時(shí)間老差8個(gè)小時(shí),可我的系統(tǒng)明明是中國(guó)標(biāo)準(zhǔn)時(shí)(GMT+8),最后終于找到了問(wèn)題所在。
    2009-12-12
  • php仿ZOL分頁(yè)類代碼

    php仿ZOL分頁(yè)類代碼

    模板zol網(wǎng)站的分頁(yè)效果代碼,效果如下圖所示
    2008-10-10
  • php實(shí)現(xiàn)的中秋博餅游戲之繪制骰子圖案功能示例

    php實(shí)現(xiàn)的中秋博餅游戲之繪制骰子圖案功能示例

    這篇文章主要介紹了php實(shí)現(xiàn)的中秋博餅游戲之繪制骰子圖案功能,涉及php圖形繪制中位置、顏色、形狀等相關(guān)屬性設(shè)置操作技巧,需要的朋友可以參考下
    2017-11-11

最新評(píng)論