[转载]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'] = '支付币种'; ?>