zoukankan      html  css  js  c++  java
  • ECSHOP农行支付接口开发(含手机端)

    对于ECSHOP来说,支付是以接口的形式存在的。于是:

    1:首先添加接口文件

    includesmodulespayment下,增加abcbank.php,代码如下:

    <?php
    /**
     * ECSHOP 农行在线插件
     * $Author: 嘉兴科蓝软件有限公司
     * QQ 32974283
     */
    
    if (!defined('IN_ECS'))
    {
        die('Hacking attempt');
    }
    
    $payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/abcbank.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']    = '农行接口';
    
        /* 是否支持货到付款 */
        $modules[$i]['is_cod']  = '0';
    
        /* 是否支持在线支付 */
        $modules[$i]['is_online']  = '1';
    
        /* 支付费用 */
        $modules[$i]['pay_fee'] = '0';
    
        /* 作者 */
        $modules[$i]['author']  = '嘉兴科蓝软件有限公司';
    
        /* 网址 */
        $modules[$i]['website'] = 'http://www.kelasoft.com/';
    
        /* 版本号 */
        $modules[$i]['version'] = 'kelasoft.com V1.0';
    
        /* 配置信息 */
        $modules[$i]['config'] = array(
        
        );
    
        return;
    }
    
    /**
     * 类
     */
    class abcbank
    {
        /**
         * 构造函数
         *
         * @access  public
         * @param
         *
         * @return void
         */
        function abcbank()
        {
        }
    
        function __construct()
        {
            $this->abcbank();
        }
    
        /**
         * 生成支付代码
         * @param   array   $order      订单信息
         * @param   array   $payment    支付方式信息
         */
        function get_code($order, $payment)
        {   
            if (!defined('EC_CHARSET'))
            {
                $charset = 'utf-8';
            }
            else
            {
                $charset = EC_CHARSET;
            }
            
            $tOrderNo    = $order['order_id'];//$order['order_sn'];                         /*订单编号*/
            $tOrderDesc = 'Game Card Order';                           /*订单说明*/
            $tOrderDate = date("Y/m/d", $order['add_time']);           /*订单日期*/
            $tOrderTime = date("h:i:s", $order['add_time']);           /*订单时间*/
            $tOrderAmountStr = $order['order_amount'];//sprintf("%012d",$order['order_amount']);                  /*订单金额*/
            $tOrderURL ='http://localhost:8080/huahui/MerchantPayment/MerchantQueryOrder.php?OrderNo=ON200306300001&QueryType=1';                   /*订单查询网址*/
            $tProductType = '0202';                                        /*商品种类*/
            $tPaymentType ='A';                                         /*支付类型*/
            $tpaymentlinktype ='1';                                     /*接入类型*/
            $tnotifytype = '0';                                         /*通知方式*/
            $tresultnotifyurl ='http://localhost:8080/huahui/MerchantPayment/MerchantResult.php';                                               /*支付结果地址*/
            $tMerchantRemarks = 'Hi!';                                  /*商家备注*/
            $tTotalCount = '1';                                         /*订单数量*/
            $tproductid = "160605";                                     /*商品ID*/
            $tproductname= "HTC s710e";                                 /*商品名称*/
            $tuniteprice ="0.01";                                       /*商品单价*/
            $tqty        ="1";                                          /*购买数量*/
            
    
            $def_url  = '<br /><form style="text-align:center;" method=post action="MerchantPayment/MerchantPayment.php">';
            $def_url .= "<input type=HIDDEN name='OrderNo' value='". $tOrderNo."'>";
            $def_url .= "<input type=HIDDEN name='OrderDesc' value='". $tOrderDesc."'>";
            $def_url .= "<input type=HIDDEN name='OrderDate' value='".$tOrderDate."'>";
            $def_url .= "<input type=HIDDEN name='OrderTime'  value='".$tOrderTime."'>";
            $def_url .= "<input type=HIDDEN name='OrderAmount'  value='".$tOrderAmountStr."'>";
            $def_url .= "<input type=HIDDEN name='OrderURL' value='".$tOrderURL."'>";
            $def_url .= "<input type=HIDDEN name='ProductType' value='".$tProductType."'>";
            $def_url .= "<input type=HIDDEN name='PaymentType' value='".$tPaymentType."'>";
            $def_url .= "<input type=HIDDEN name='PaymentLinkType' value='".$tpaymentlinktype."'>";
            $def_url .= "<input type=HIDDEN name='NotifyType' value='".$tnotifytype."'>";
            $def_url .= "<input type=HIDDEN name='ResultNotifyURL' value='".$tresultnotifyurl."'>";
            $def_url .= "<input type=HIDDEN name='MerchantRemarks' value='".$tMerchantRemarks."'>";
            $def_url .= "<input type=HIDDEN name='TotalCount' value='".$tTotalCount."'>";
            $def_url .= "<input type=HIDDEN name='productid[]' value='".$tproductid."'>";
            $def_url .= "<input type=HIDDEN name='productname[]' value='".$tproductname."'>";
            $def_url .= "<input type=HIDDEN name='uniteprice[]' value='".$tuniteprice."'>";
            $def_url .= "<input type=HIDDEN name='qty[]' value='".$tqty."'>";
            $def_url .= "<input type=submit value='" .$GLOBALS['_LANG']['pay_button']. "'>";
            $def_url .= "</form>";
            
             return $def_url;
        }
    
        /**
         * 响应操作
         */
        function respond()
        {
        }
    }
       ?>

    那么,注意了,respond在这里是不需要写任何代码的,农行数据会直接跳转到tresultnotifyurl 所定义的地址上。

    二:发送和接收

    MerchantPayment/MerchantPayment.php,如下:

    <?php
    
    require_once ('../ebusclient/PaymentRequest.php');
     
    $tRequest = new PaymentRequest();
    
    $tRequest->order["PayTypeID"] = "ImmediatePay";//($_POST['PayTypeID']); //设定交易类型
    $tRequest->order["OrderNo"] = ($_POST['OrderNo']); //设定订单编号
    $tRequest->order["ExpiredDate"] = "30";//($_POST['ExpiredDate']); //设定订单保存时间
    $tRequest->order["OrderAmount"] = ($_POST['OrderAmount']);//($_POST['PaymentRequestAmount']); //设定交易金额
    $tRequest->order["Fee"] = "";//($_POST['Fee']); //设定手续费金额
    $tRequest->order["CurrencyCode"] = "156";//($_POST['CurrencyCode']); //设定交易币种
    $tRequest->order["ReceiverAddress"] = "xx";//($_POST['ReceiverAddress']); //收货地址
    $tRequest->order["InstallmentMark"] = "0";//($_POST['InstallmentMark']); //分期标识
    $installmentMerk = "0";//$_POST['InstallmentMark'];
    $paytypeID = "ImmediatePay";//$_POST['PayTypeID'];
    if (strcmp($installmentMerk, "1") == 0 && strcmp($paytypeID, "DividedPay") == 0) {
        $tRequest->order["InstallmentCode"] = ($_POST['InstallmentCode']); //设定分期代码
        $tRequest->order["InstallmentNum"] = ($_POST['InstallmentNum']); //设定分期期数
    }
    $tRequest->order["BuyIP"] = "";//($_POST['BuyIP']); //IP
    $tRequest->order["OrderDesc"] = ($_POST['OrderDesc']); //设定订单说明
    $tRequest->order["OrderURL"] = ($_POST['OrderURL']); //设定订单地址
    $tRequest->order["OrderDate"] = ($_POST['OrderDate']); //设定订单日期 (必要信息 - YYYY/MM/DD)
    date_default_timezone_set('PRC');
    $hh = date("H:i:s",time());
    $tRequest->order["OrderTime"] = $hh;//($_POST['OrderTime']); //设定订单时间 (必要信息 - HH:MM:SS)
    $tRequest->order["orderTimeoutDate"] = "20240619104901";//($_POST['orderTimeoutDate']); //设定订单有效期
    $tRequest->order["CommodityType"] = "0202";//($_POST['CommodityType']); //设置商品种类
    
    $orderitem = array ();
    $orderitem["SubMerName"] = "HongYue HuaHui"; //设定二级商户名称
    $orderitem["SubMerId"] = "12345"; //设定二级商户代码
    $orderitem["SubMerMCC"] = "0000"; //设定二级商户MCC码 
    $orderitem["SubMerchantRemarks"] = "xx"; //二级商户备注项
    $orderitem["ProductID"] = "IP000001"; //商品代码,预留字段
    $orderitem["ProductName"] = ($_POST['OrderDesc']); //商品名称
    $orderitem["UnitPrice"] = "1.00"; //商品总价
    $orderitem["Qty"] = "1"; //商品数量
    $orderitem["ProductRemarks"] = ($_POST['OrderDesc']); //商品备注项
    $orderitem["ProductType"] = "0202"; //商品类型
    $orderitem["ProductDiscount"] = "0.9"; //商品折扣
    $orderitem["ProductExpiredDate"] = "10"; //商品有效期
    $tRequest->orderitems[0] = $orderitem;
    
    //3、生成支付请求对象
    $tRequest->request["PaymentType"] = ($_POST['PaymentType']); //设定支付类型
    $tRequest->request["PaymentLinkType"] = ($_POST['PaymentLinkType']); //设定支付接入方式
    if ($_POST['PaymentType'] === "6" && $_POST['PaymentLinkType'] === "2") {
        $tRequest->request["UnionPayLinkType"] = ($_POST['UnionPayLinkType']); //当支付类型为6,支付接入方式为2的条件满足时,需要设置银联跨行移动支付接入方式
    }
    $tRequest->request["ReceiveAccount"] = "";//($_POST['ReceiveAccount']); //设定收款方账号
    $tRequest->request["ReceiveAccName"] = "";//($_POST['ReceiveAccName']); //设定收款方户名
    $tRequest->request["NotifyType"] = ($_POST['NotifyType']); //设定通知方式
    $tRequest->request["ResultNotifyURL"] = ($_POST['ResultNotifyURL']); //设定通知URL地址
    $tRequest->request["MerchantRemarks"] = ($_POST['MerchantRemarks']); //设定附言
    $tRequest->request["IsBreakAccount"] = "0";    //($_POST['IsBreakAccount']); //设定交易是否分账
    $tRequest->request["SplitAccTemplate"] = "";//($_POST['SplitAccTemplate']); //分账模版编号        
    
    $tResponse = $tRequest->postRequest();
    //支持多商户配置
    //$tResponse = $tRequest->extendPostRequest(2);
    
    if ($tResponse->isSuccess()) {
    //    print ("<br>Success!!!" . "</br>");
    //    print ("ReturnCode   = [" . $tResponse->getReturnCode() . "]</br>");
    //    print ("ReturnMsg   = [" . $tResponse->getErrorMessage() . "]</br>");
        $PaymentURL = $tResponse->GetValue("PaymentURL");
    //    print ("<br>PaymentURL=$PaymentURL" . "</br>");
        echo "<script language='javascript'>";
        echo "window.location.href='$PaymentURL'";
        echo "</script>";
    } else {
        print ("<br>对不起,不能重复发起支付, 请重新下单!!!" . "</br>");
        //print ("<br>Failed!!!" . "</br>");
        //print ("ReturnCode   = [" . $tResponse->getReturnCode() . "]</br>");
        //print ("ReturnMsg   = [" . $tResponse->getErrorMessage() . "]</br>");
    }
    ?>

    MerchantPayment/MerchantResult.php,如下:

    <?php
    define('IN_ECS', true);
    
    require('../includes/init.php');
    
    require_once ('../includes/lib_payment.php');
    require_once ('../ebusclient/Result.php');
    
    $tResult = new Result();
    $tResponse = $tResult->init($_POST['MSG']);
    
    if ($tResponse->isSuccess()) {
        //2、、支付成功
    //    print ("TrxType         = [" . $tResponse->getValue("TrxType") . "]<br/>");
    //    print ("OrderNo         = [" . $tResponse->getValue("OrderNo") . "]<br/>");
    //    print ("Amount          = [" . $tResponse->getValue("Amount") . "]<br/>");
    //    print ("BatchNo         = [" . $tResponse->getValue("BatchNo") . "]<br/>");
    //    print ("VoucherNo       = [" . $tResponse->getValue("VoucherNo") . "]<br/>");
    //    print ("HostDate        = [" . $tResponse->getValue("HostDate") . "]<br/>");
    //    print ("HostTime        = [" . $tResponse->getValue("HostTime") . "]<br/>");
    //    print ("MerchantRemarks = [" . $tResponse->getValue("MerchantRemarks") . "]<br/>");
    //    print ("PayType         = [" . $tResponse->getValue("PayType") . "]<br/>");
    //    print ("NotifyType      = [" . $tResponse->getValue("NotifyType") . "]<br/>");
        new_order_paid($tResponse->getValue("OrderNo"), PS_PAYED, '', '农行支付');
    //    print ("xxx");
        $url = "http://localhost:8080/huahui/user.php?act=order_list";  
        echo "<script language='javascript' type='text/javascript'>";  
        echo "window.location.href='$url'";  
        echo "</script>";  
    } else {
        //3、失败
        print ("<br>ReturnCode   = [" . $tResponse->getReturnCode() . "]<br>");
        print ("ErrorMessage = [" . $tResponse->getErrorMessage() . "]<br>");
        set_pay_error($tResponse->getValue("OrderNo"), "", $tResponse->getValue("Amount"), '农行支付', $tResponse->getReturnCode());
                
    }
    ?>

    三:安装

    接下来,我们就需要安装了,

    1:首先将文件夹和文件进行覆盖;

    2:进入系统后台,点击安装

    image

    3:修改证书地址、商户号、密码等,

    image

    首先,找到文件:ebusclientTrustMerchant.ini,然后把2和4两个证书的路径,改为cert文件夹对应文件的绝对路径。上图3处指需要给接口指定一个日志路径(备注:一定要创建路径)。

    至此,我们的ecshop的pc端已经支持农行支付了。

    四:关于手机端

    echshop的支付只要按照上面进行安装,数据库中就有了记录,如下:

    image

    所以,手机端类似,接口文件不需要动了。只不过,需要在mobile目录下一样添加MerchantPayment文件夹,加入发送和接收的文件就可以了。

  • 相关阅读:
    Spring MVC 入门示例讲解
    使用Word2013,发布博文到博客园
    走过2103,迈向2014
    C#中的字符串拼接@,$
    ORA-22922:nonexistent LOB value问题及listagg()函数
    证明一个数是不是存在于该数组中
    论java中System.arrayCopy()与Arrays.copyOf()的区别
    JSP中获取各种路径的方法
    JavaScript中变量声明有var和没var的区别
    JavaScript:理解事件循环
  • 原文地址:https://www.cnblogs.com/luminji/p/4944634.html
Copyright © 2011-2022 走看看