[转载]ECSHOP中国工商银行(ICBC)支付插件_舟清江碧_百度空间.
安装说明:
一、按工行的开发文档配置好环境。
1、ICBCEBankUtil.dll和infosecapi.dll两个dll文件拷贝到系统system32目录下;
2、运行“regsvr32 ICBCEBankUtil.dll”命令注册控件;
3、在httpd.conf中添加
- LoadModule php5_module “c:/WINSOWS/system32/ICBCEBankUtil.dll”
- LoadModule php5_module “c:/WINSOWS/system32/infosecapi.dll”
二、将解压后的 includes\ languages\ 下的文件copy到商城安装目录。
三、修改flow.php文件,在代码:
elseif ($_REQUEST['step'] == 'done')
{
}
中加入以下内容:
/* 读出购物车中的信息,给$order赋值,工行支付信息中需要 */
$order['goodsNum'] = 0; //购买货品的数量
$order['goodsIDs'] = ''; //购买货品的货号
$order['goodsNames'] = ''; //购买货品的名称
$cs = "SELECT * FROM " . $ecs->table('cart') .
" WHERE session_id = '" . SESS_ID . "' " .
"AND parent_id = 0 AND is_gift = 0 AND rec_type = '$flow_type'";
$cq = $db->query($cs);
while($rq = $db->fetchRow($cq)){
$order['goodsNum'] += 1;
$order['goodsIDs'] .= $rq['goods_sn'].'-';
$order['goodsNames'] .= $rq['goods_name'].'-';
}
四、重启Apache
使用说明:
在后台支付方式中 将会多出一项“工行在线支付”,点击安装即可。
includes/modules/pament/icbc.php:
<?php
/**
* ECSHOP 中国工商银行(ICBC)支付插件
* ============================================================================
* Jacklee的博客-专注于PHP技术
* 网站地址: http://www.phpally.com
* @author Jacklee<jack349392900@gmail.com>
* @date 2012-03-08
*/
if (!defined('IN_ECS'))
{
die('Hacking attempt');
}
$payment_lang = ROOT_PATH . 'languages/' . $GLOBALS['_CFG']['lang'] . '/payment/icbc.php';
if (file_exists($payment_lang))
{
global $_LANG;
include_once($payment_lang);
}
/**
* 模块信息
*/
if (isset($set_modules) >> $set_modules == true)
{
$i = isset($modules) ? count($modules) : 0;
/* 代码 */
$modules[$i]['code'] = basename(__FILE__, '.php');
/* 描述对应的语言项 */
$modules[$i]['desc'] = 'icbc_desc';
/* 是否支持货到付款 */
$modules[$i]['is_cod'] = '0'; //否
/* 是否支持在线支付 */
$modules[$i]['is_online'] = '1'; //是
/* 作者 */
$modules[$i]['author'] = 'Jacklee';
/* 网址 */
$modules[$i]['website'] = 'http://www.phpally.com';
/* 版本号 */
$modules[$i]['version'] = '1.0';
/* 配置信息 */
$modules[$i]['config'] = array(
array('name' => 'merID', 'type' => 'text', 'value' => ''),//商户代码
array('name' => 'merAcct', 'type' => 'text', 'value' => ''),//商户帐号
array('name' => 'curType', 'type' => 'text', 'value' => ''),//支付币种
);
return;
}
class icbc
{
/**
* 构造函数
*
* @access public
* @param
*
* @return void
*/
function icbc()
{
}
function __construct()
{
$this->icbc();
}
/**
* 生成支付代码
* @param array $order 订单信息
* @param array $payment 支付方式信息
*/
function get_code($order, $payment)
{
$strReturnCode = '';
//————————————————-
//– 根据定单生成 交易数据
//————————————————-
$TDT = '<?xml version="1.0" encoding="GBK" standalone="no"?>';
$TDT .= '<B2CReq>';
$TDT .= '<interfaceName>ICBC_PERBANK_B2C</interfaceName>';
$TDT .= '<interfaceVersion>1.0.0.3</interfaceVersion>';
$TDT .= '<orderInfo>';
$TDT .= '<orderDate>'.local_date('YmdHis', $order['add_time']).'</orderDate>';
$TDT .= '<orderid>'.$order['order_sn'].'</orderid>';//订单号
$TDT .= '<amount>'.($order['order_amount'] * 100).'</amount>';//订单金额
$TDT .= '<curType>'.$payment['cutType'].'</curType>';//支付币种
$TDT .= '<merID>'.$payment['merID'].'</merID>';//商户代码
$TDT .= '<merAcct>'.$payment['merAcct'].'</merAcct>';//商户帐号
$TDT .= '</orderInfo>';
$TDT .= '<custom>';
$TDT .= '<verifyJoinFlag>0</verifyJoinFlag>';//是否检验联名标志 D
$TDT .= '<Language></Language>';//语种 默认为中文 D
$TDT .= '</custom>';
$TDT .= '<message>';
$TDT .= '<goodsID>'.$order['goodsIDs'].'</goodsID>'; //商品编号
$TDT .= '<goodsName>'.$order['goodsNames'].'</goodsName>';//商品名称
$TDT .= '<goodsNum>'.$order['goodsNum'].'</goodsNum>';//商品数量
$TDT .= '<carriageAmt></carriageAmt>';//已含运费金额
$TDT .= '<merHint></merHint>';//商城提示
$TDT .= '<remark1></remark1>';//备注字段1
$TDT .= '<remark2></remark2>';//备注字段2
$TDT .= '<merURL>http://www.fanrui.cn</merURL>';//处理完成后 跳转到的地址 D
$TDT .= '<merVAR></merVAR>';//商户变量 会按原样返回
$TDT .= '</message>';
$TDT .= '</B2CReq>';
$tranData = base64_encode($TDT);
//————————————————-
//– 初始化工行支付对象
//————————————————-
$icbcPayObj= new com('ICBCEBANKUTIL.B2CUtil');
$rc=$icbcPayObj->init("c:\wamp\www\includes\icbc\ectest01.crt"
,"c:\wamp\www\includes\icbc\ectest01.crt"
,"c:\wamp\www\includes\icbc\ectest01.key"
,$TDT);
if($rc != 0){
$errorCode = "初始化失败 调试代码:".$icbcPayObj->getRC();
return $errorCode;
}
//———————————————————-
//– 签名
//———————————————————-
$merSignMsg = '';
$qianMing = $icbcPayObj->signC($TDT, strlen($TDT));
if($qianMing == ''){
$errorCode = "签名失败! 调试代码:".$icbcPayObj->getRC();
return $errorCode;
}else{
$merSignMsg = base64_encode($qianMing);
}
//———————————————————–
//– 验证签名
//————————————————————-
$qm_ok = $icbcPayObj->verifySignC($TDT, strlen($TDT), $qianMing, strlen($qianMing));
if($qm_ok != 0){
$errorCode = "签名验证失败! 调试代码:".$icbcPayObj->getRC();
return $errorCode;
}
//————————————————————-
//– 获取商户证书
//————————————————————-
$cert = $icbcPayObj->getCert(1);
if($cert == ''){
$errorCode = "获取商户证书失败! 调试代码:".$icbcPayObj->getRC();
return $errorCode;
}
//————————————————————–
//– 商城证书公钥
//————————————————————–
$file_handle = fopen("c:\wamp\www\includes\icbc\ectest01.crt", "r");
$line = '';
while (!feof($file_handle)) {
$line .= fgets($file_handle);
}
$merCert = base64_encode($line);
fclose($file_handle);
//————————————————————-
//– 生成支付form串
//————————————————————-
$strReturnCode = "<div style='text-align:center'>";
$strReturnCode .= "<form name='form1' method='post' action='https://210.82.37.103/servlet/ICBCINBSEBusinessServlet'>";
$strReturnCode .= "<INPUT NAME='interfaceName' TYPE='text' value='ICBC_PERBANK_B2C'>";
$strReturnCode .= "<INPUT NAME='interfaceVersion' TYPE='text' value='1.0.0.3'>";
$strReturnCode .= "<INPUT NAME='tranData' TYPE='hidden' value='".$tranData."' >";
$strReturnCode .= "<INPUT NAME='merSignMsg' TYPE='hidden' value='".$merSignMsg."'>";
$strReturnCode .= "<INPUT NAME='merCert' TYPE='hidden' value='".$merCert."'>";
$strReturnCode .= "<input type='submit' value='工行在线支付'>";
$strReturnCode .= "</form>";
$strReturnCode .= "</div></br>";
return $strReturnCode;
}
/**
* 响应操作
*/
function respond()
{
}
}
?>
languages/zh_cn/payment/icbc.php:
<?php
/**
* ECSHOP 中国工商银行(ICBC)支付 语言文件
* ============================================================================
* Jacklee的博客-专注于PHP技术
* 网站地址: http://www.phpally.com
* @author Jacklee<jack349392900@gmail.com>
* @date 2012-03-08
*/
global $_LANG;
$_LANG['merID'] = '商户代码';
$_LANG['merAcct']= '商户帐号';
$_LANG['curType'] = '支付币种';
?>
Mikel