对于ECSHOP来说,支付是以接口的形式存在的。于是:
1:首先添加接口文件
includes\modules\payment下,增加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:进入系统后台,点击安装
3:修改证书地址、商户号、密码等,
首先,找到文件:\ebusclient\TrustMerchant.ini,然后把2和4两个证书的路径,改为cert文件夹对应文件的绝对路径。上图3处指需要给接口指定一个日志路径(备注:一定要创建路径)。
至此,我们的ecshop的pc端已经支持农行支付了。
四:关于手机端
echshop的支付只要按照上面进行安装,数据库中就有了记录,如下:
所以,手机端类似,接口文件不需要动了。只不过,需要在mobile目录下一样添加MerchantPayment文件夹,加入发送和接收的文件就可以了。