[转载]ECSHOP中国工商银行(ICBC)支付插件_舟清江碧_百度空间

[转载]ECSHOP中国工商银行(ICBC)支付插件_舟清江碧_百度空间.

安装说明:
一、按工行的开发文档配置好环境。
1、ICBCEBankUtil.dll和infosecapi.dll两个dll文件拷贝到系统system32目录下;
2、运行“regsvr32 ICBCEBankUtil.dll”命令注册控件;
3、在httpd.conf中添加

  1. LoadModule php5_module “c:/WINSOWS/system32/ICBCEBankUtil.dll”
  2. 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']  = '支付币种';
            
    ?>
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏