本項目用zend framework框架實現的
modules/default/controllers/IndexController
IndexController
<?php
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
/*模擬訂單
*$MockOrder是從數據庫取出來的信息
*orderId訂單號
*usr_idtype證件類型
*usr_idcode證件號
*etx_status是否優惠
*time_create驗證是否符合優惠的時間
*ets_license套餐代碼如同商品類別
*contact_type聯系方式類型
*contact_text聯系方式
*etsPrice套餐價格及商品價格
*orderPrice實際價格
*orderAmount訂單實際支付金額
*orderTime訂單時間
*paySuccess訂單是否支付成功
*buySuccess賬號是否生成功
*payTime訂單支付成功時間
*總之凡是跟訂單有關的都是必要字段
*orderId
*paySuccess
*/
$MockOrder = array();
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
$MockOrder[
//BillRequest就是快錢那邊需要的的一些參數
$this
Zend_Debug::dump($this
}
//bgUrl地址指向這裡
public function receiveAction()
{
//receive數據庫設計
/*用$MockReceive數組模擬
* $MockReceive = array();
* $MockReceive[
* $MockReceive[
* $MockReceive[
* $MockReceive[
* $MockReceive[
* $MockReceive[
* $MockReceive[
* $MockReceive[
* $MockReceive[
* $MockReceive[
* $MockReceive[
*/
/*$_REQUEST是快錢那邊返回來的數據
* merchantAcctId人民幣賬號
* version網關版本
* language網頁顯示語言種類
* signType簽名類型
* payType支付方式
* bankId銀行代碼
* orderId商戶訂單號
* orderTime商戶訂單提交時間
* orderAmount商戶訂單金額
* dealId快錢交易號
* bankDealId銀行交易號
* dealTime快錢交易時間
* payAmount訂單實際支付金額
* fee費用
* ext
* ext
* payResult處理結果
* errCode錯誤代碼
* signMsg簽名字符串
*/
$BillResponse = new Application_Model_BillResponse($_REQUEST);
//$BillResponse
if($BillResponse
//判斷訂單支付是否成功
if($BillResponse
//返回給快錢
return "<result>
}else{
//返回給快錢
return "<result>
}
}
//返回給快錢
return "<result>
}
//redirecturl地址
//成功
public function success()
{
}
//失敗
public function fail()
{
}
}
modules/default/views/scripts/index/index
<?php $BillRequest = (array)$this
<div style="display:none;">
<form name="kqPay" action="
<?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
</script>
models/BillRequest
BillRequest
<?php
class Application_Model_BillRequest
{
public function __construct($MockOrder){
/*
* 人民幣網關賬號
*第一種方式
*第二種方式
*/
$this
//服務器接收支付結果的後台地址
$this
//商戶訂單號
$this
//訂單金額
$this
//訂單提交時間
$this
//支付人姓名
$this
//支付人聯系類型
$this
//支付人聯系方式
$this
//商品名稱
$this
//商品數量
$this
//商品代碼
$this
//商品描述
$this
//支付方式
$this
//編碼方式
$this
//網關版本
$this
//語言種類
$this
//簽名類型
$this
//接收支付結果的頁面地址
$this
//擴展字段
$this
//擴展自段
$this
//銀行代碼
$this
//同一訂單禁止重復提交標志
$this
//快錢合作伙伴的帳戶號
$this
//快錢提供的request參數
$KeyOrders = array(
//判斷快錢提供的request參數的值是否為空
foreach($KeyOrders as $key){
if(
$params[$key] = $this
}
//http_build_query()生成URL
//urldecode()還原未編碼的字符串
//getSignMsg() PKI加密
//MD
//常用PKI加密
$this
}
//PKI加密技術
public function getSignMsg($param){
//
//本地隨機生成一個KEY
$priv_key_id = openssl_get_privatekey(file_get_contents("
//用$priv_key_id給$param數據加密
//計算一個簽名字符串$param通過使用SHA
openssl_sign($param
//從存儲器上釋放$priv_key_id
openssl_free_key($priv_key_id);
//使用base
return base
}
}
models/BillResponse
BillResponse
<?php
class Application_Model_BillResponse
{
/*
* __construct()構造函數
* 生成
*/
public function __construct($response){
$KeyOrders = array(
foreach($KeyOrders as $key){
$this
}
}
/*
* 檢查簽名字符串
* 快錢返回的簽名字符串是$this
* 使用base
* 驗證使用快錢給的公鑰驗證
* 快錢那邊他們把返回來的參數值不為空的使用私鑰加密生成了$this
* 快錢給了我們私鑰對應的公鑰
*/
public function checkSignMsg(){
$KeyOrders = array(
foreach($KeyOrders as $key){
if(
$params[$key] = $this
}
//$pub_key_id 公鑰
$pub_key_id = openssl_get_publickey(file_get_contents("
return openssl_verify(urldecode(http_build_query($params))
}
public function isSuccess(){
//$this
return
}
public function getOrderId(){
return str_replace(
}
}
需要一個公鑰和一個私鑰
都是一半
From:http://tw.wingwit.com/Article/program/PHP/201311/20903.html