萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> 使用php實現快錢支付功能

使用php實現快錢支付功能

本項目用zend framework框架實現的
modules/default/controllers/IndexController.php
IndexController.php

復制代碼 代碼如下:
<?php
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{

/*模擬訂單
*$MockOrder是從數據庫取出來的信息,它包含一些塊錢Request的信息。這裡我寫死了。
*orderId訂單號,數據庫表的主鍵(唯一)。 //必要字段
*usr_idtype證件類型,根據自己需要。
*usr_idcode證件號,根據自己需要。
*etx_status是否優惠,根據自己需要。
*time_create驗證是否符合優惠的時間,根據自己需要。
*ets_license套餐代碼如同商品類別,根據自己需要。
*contact_type聯系方式類型,固定選擇值1,2。1電子郵件,2手機號,根據自己需要,塊錢那邊可以為空。
*contact_text聯系方式,根據contact_type來填寫,根據自己需要,塊錢那邊可以為空。
*etsPrice套餐價格及商品價格,根據自己需要。
*orderPrice實際價格,根據自己需要。
*orderAmount訂單實際支付金額,這個要加手續費的。 //必要字段
*orderTime訂單時間。 //必要字段
*paySuccess訂單是否支付成功。 //必要字段
*buySuccess賬號是否生成功,根據自己需要
*payTime訂單支付成功時間。 //必要字段
*總之凡是跟訂單有關的都是必要字段
*orderId、orderAmount、orderTime為 Request所需字段
*paySuccess、payTime為Response所需字段
*/
$MockOrder = array();
$MockOrder['orderId'] = '100000125';//訂單號。--必要
$MockOrder['usr_idtype'] = '1';//證件類型,身份證
$MockOrder['usr_idcode'] = '371111199011111111';//身份證號
$MockOrder['etx_status'] = '0';//是否優惠,否
$MockOrder['time_create'] = '1352338189';//驗證是否優惠時間
$MockOrder['ets_license'] = '1';//套餐代碼及商品類別
$MockOrder['contact_type'] = '1';//聯系方式類型 1,郵箱
$MockOrder['contact_text'] = '[email protected]';//聯系方式,郵箱
$MockOrder['etsPrice'] = '30800';//套餐價格及商品價格
$MockOrder['orderPrice'] = '30800';//實際價格
$MockOrder['orderAmount'] = '31100';//訂單實際支付價格,加手續費的。--必要
$MockOrder['orderTime'] = '1352338199';//訂單生成時間。--必要
$MockOrder['paySuccess'] = '0';//訂單是否支付成功。--必要
$MockOrder['buySuccess'] = '0';//賬號是否生成成功
$MockOrder['payTime'] = '0';//訂單支付時間。--必要

//BillRequest就是快錢那邊需要的的一些參數
$this->view->BillRequest = new Application_Model_BillRequest($MockOrder);
Zend_Debug::dump($this->view->BillRequest);exit;
}

//bgUrl地址指向這裡
public function receiveAction()
{
//receive數據庫設計
/*用$MockReceive數組模擬
* $MockReceive = array();
* $MockReceive['id']主鍵;
* $MockReceive['orderId']商戶訂單號;
* $MockReceive['receiveTime']接受時間;
* $MockReceive['queryString']http_build_encode($_REQUEST);
* $MockReceive['dealId']快錢交易號;
* $MockReceive['bankDealId']銀行交易號;
* $MockReceive['payResult']處理結果10:支付成功;11:支付失敗;
* $MockReceive['dealTime']快錢交易時間;
* $MockReceive['payAmount']訂單實際支付金額;
* $MockReceive['fee']費用;
* $MockReceive['errCode']錯誤代碼;
*/


/*$_REQUEST是快錢那邊返回來的數據
* merchantAcctId人民幣賬號,與提交訂單時的塊錢賬號保持一致。
* version網關版本,固定值:v2.0,與提交訂單時的網關版本號保持一致。
* language網頁顯示語言種類,1中文顯示,與提交訂單時的網頁顯示語言種類保持一致
* signType簽名類型,4PKI簽名,與提交訂單時的簽名類型保持一致
* payType支付方式,00全部,與提交訂單時的支付方式保持一致
* bankId銀行代碼
* orderId商戶訂單號,與提交訂單時的商戶訂單號保持一致
* orderTime商戶訂單提交時間,與提交訂單時的商戶訂單提交時間保持一致
* orderAmount商戶訂單金額,與提交訂單時的商戶訂單金額保持一致。
* dealId快錢交易號
* bankDealId銀行交易號
* dealTime快錢交易時間
* payAmount訂單實際支付金額
* fee費用
* ext1擴展字段1,與提交訂單時的擴展字段1保持一致
* ext2擴展字段2,與提交訂單時的擴展字段2保持一致
* payResult處理結果 10:支付成功;11:支付失敗
* errCode錯誤代碼,可為空
* signMsg簽名字符串
*/
$BillResponse = new Application_Model_BillResponse($_REQUEST);
//$BillResponse->checkSignMsg驗證簽名字符串是否正確,防止bug漏洞等
if($BillResponse->checkSignMsg){
//判斷訂單支付是否成功
if($BillResponse->isSuccess){
//返回給快錢,快錢會按照redirecturl地址跳到新頁面,這裡是成功頁面
return "<result>1</result><redirecturl>http://99bill/default/index/sucess</redirecturl>";exit;
}else{
//返回給快錢,快錢會按照redirecturl地址跳到新頁面,這個是失敗頁面
return "<result>1</result><redirecturl>http://99bill/default/index/fail</redirecturl>";exit;
}
}
//返回給快錢,快錢會按照redirecturl地址跳到新頁面,這個是失敗頁面
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

復制代碼 代碼如下:
<?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

復制代碼 代碼如下:
<?php
class Application_Model_BillRequest
{
public function __construct($MockOrder){
/*
* 人民幣網關賬號。
*第一種方式:該賬號為11位人民幣網關商戶編號+01,該參數必填。01對應工商銀行。
*第二種方式:該賬號為16位人民幣網關商戶
*/
$this->merchantAcctId = "1001011111101";
//服務器接收支付結果的後台地址,該參數務必填寫,絕對路徑//不能為空。
$this->bgUrl = "http://99bill/default/index/receive";
//商戶訂單號,以下采用時間來定義訂單號,商戶可以根據自己訂單號的定義規則來定義該值//不能為空。
$this->orderId = 'TOLPC'.sprintf("%09d", $MockOrder['orderId']);
//訂單金額,金額以“分”為單位,商戶測試以1分測試即可,切勿以大金額測試,該參數必填//不能為空
$this->orderAmount =$MockOrder['orderAmount'];
//訂單提交時間,格式:yyyyMMddHHmmss,如:20071117020101//不能為空。
$this->orderTime = date("YmdHis", $MockOrder['orderTime']);
//支付人姓名,可以為空。
$this->payerName= "";
//支付人聯系類型,1 代表電子郵件方式;2 代表手機聯系方式。可以為空。
$this->payerContactType = "";
//支付人聯系方式,與payerContactType設置對應,payerContactType為1,則填寫郵箱地址;payerContactType為2,則填寫手機號碼。可以為空。
$this->payerContact = "";
//商品名稱,可以為空。
$this->productName= &qu
copyright © 萬盛學電腦網 all rights reserved