You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
7.8 KiB
235 lines
7.8 KiB
<?php
|
|
|
|
/**
|
|
* ECSHOP 上海银联在线支付
|
|
* ============================================================================
|
|
* 版权所有 2005-2016 上海商创网络科技有限公司,并保留所有权利。
|
|
* 网站地址: http://www.ecmoban.com;
|
|
* ----------------------------------------------------------------------------
|
|
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
|
|
* 使用;不允许对程序代码以任何形式任何目的的再发布。
|
|
* ============================================================================
|
|
* $Author: douqinghua $
|
|
* $Id: upop.php 17063 2010-03-25 06:35:46Z douqinghua $
|
|
*/
|
|
|
|
if (!defined('IN_ECS'))
|
|
{
|
|
die('Hacking attempt');
|
|
}
|
|
|
|
// 包含配置文件
|
|
$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/syl.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'] = 'syl_desc';
|
|
|
|
/* 是否支持货到付款 */
|
|
$modules[$i]['is_cod'] = '0';
|
|
|
|
/* 是否支持在线支付 */
|
|
$modules[$i]['is_online'] = '1';
|
|
|
|
/* 作者 */
|
|
$modules[$i]['author'] = 'ECSHOP TEAM';
|
|
|
|
/* 网址 */
|
|
$modules[$i]['website'] = 'http://www.ecmoban.com';
|
|
|
|
/* 版本号 */
|
|
$modules[$i]['version'] = '1.0.0';
|
|
|
|
/* 配置信息 */
|
|
$modules[$i]['config'] = array(
|
|
array('name' => 'syl_merAbbr', 'type' => 'text', 'value' => ''),
|
|
//array('name' => 'upop_account', 'type' => 'text', 'value' => ''),
|
|
//array('name' => 'upop_security_key', 'type' => 'text', 'value' => ''),
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* 类
|
|
*/
|
|
class syl
|
|
{
|
|
/**
|
|
* 生成支付代码
|
|
* @param array $order 订单信息
|
|
* @param array $payment 支付方式信息
|
|
*/
|
|
|
|
function config($payment)
|
|
{
|
|
define("PRI_KEY", ROOT_PATH."data/pay/".$payment['syl_merAbbr']);
|
|
//公钥文件,示例中已经包含
|
|
define("PUB_KEY", "PgPubk.key");
|
|
//支付请求地址(测试)
|
|
define("REQ_URL_PAY","http://payment.ChinaPay.com/pay/TransGet");
|
|
//支付请求地址(生产)
|
|
//define("REQ_URL_PAY","https://payment.ChinaPay.com/pay/TransGet");
|
|
$this->site_url = $this->getSiteUrl();
|
|
include_once(ROOT_PATH."data/pay/netpayclient.php");
|
|
$merid = buildKey(PRI_KEY);
|
|
return $merid;
|
|
}
|
|
|
|
function getSiteUrl(){
|
|
$host = $_SERVER['SERVER_NAME'];
|
|
$port = ($_SERVER['SERVER_PORT']=="80")?"":":$_SERVER[SERVER_PORT]";
|
|
return "http://" . $host . $port . $this->getcwdOL();
|
|
}
|
|
|
|
function getcwdOL()
|
|
{
|
|
$total = $_SERVER['PHP_SELF'];
|
|
$file = explode("/", $total);
|
|
$file = $file[sizeof($file)-1];
|
|
return substr($total, 0, strlen($total)-strlen($file)-1);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function get_code($order, $payment)
|
|
{
|
|
$merid=$this->config($payment);
|
|
$ordid = "000" . $order['order_sn'];
|
|
$transamt = padstr($order['order_amount'] * 100,12);
|
|
$curyid = "156";
|
|
$transdate = date('Ymd');
|
|
$transtype = "0001";
|
|
$version = "20070129";
|
|
|
|
// //页面返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,银行页面会自动跳转到该页面,并POST订单结果信息,可选
|
|
// $pagereturl = "$site_url/netpayclient_order_feedback.php";
|
|
// //后台返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,我方服务器会POST订单结果信息到该页面,必填
|
|
// $bgreturl = "$site_url/netpayclient_order_feedback.php";
|
|
//$frontEndUrl = $GLOBALS['ecs']->url().'respond.php';
|
|
//$backEndUrl = $GLOBALS['ecs']->url().'respond.php';
|
|
$frontEndUrl = return_url(basename(__FILE__, '.php'));
|
|
$backEndUrl = return_url(basename(__FILE__, '.php'));
|
|
|
|
//支付网关号,4位,上线时建议留空,以跳转到银行列表页面由用户自由选择,本示例选用0001农商行网关便于测试,可选
|
|
$gateid = "0001";
|
|
//备注,最长60位,交易成功后会原样返回,可用于额外的订单跟踪等,可选
|
|
$priv1 = $order['log_id'];
|
|
$plain = $merid . $ordid . $transamt . $curyid . $transdate . $transtype . $priv1;
|
|
//生成签名值,必填
|
|
$this->chkvalue = sign($plain);
|
|
$html = $this->create_html($merid , $ordid , $transamt , $curyid ,$transdate , $transtype , $order['log_id'],REQ_URL_PAY,$frontEndUrl);
|
|
return $html;
|
|
|
|
}
|
|
|
|
function create_html($merid , $ordid , $transamt , $curyid ,$transdate , $transtype , $order_log_id,$act_url,$frontEndUrl)
|
|
{
|
|
$html = <<<eot
|
|
<form action={$act_url} method="post" target="_blank">
|
|
|
|
<input type="hidden" name="MerId" value="{$merid}" />
|
|
<input type="hidden" name="Version" value="20070129" />
|
|
<input type="hidden" name="OrdId" value="{$ordid}" />
|
|
<input type="hidden" name="TransAmt" value="{$transamt}" />
|
|
<input type="hidden" name="CuryId" value="{$curyid}" />
|
|
<input type="hidden" name="TransDate" value="{$transdate}" />
|
|
<input type="hidden" name="TransType" value="{$transtype}" />
|
|
<input type="hidden" name="BgRetUrl" value="{$frontEndUrl}"/>
|
|
<input type="hidden" name="PageRetUrl" value="{$frontEndUrl}"/>
|
|
<input type="hidden" name="GateId" value=""/>
|
|
<input type="hidden" name="Priv1" value="{$order_log_id}" />
|
|
<input type="hidden" name="ChkValue" value="{$this->chkvalue}" />
|
|
<input type="submit" value="支付">
|
|
</form>
|
|
eot;
|
|
|
|
return $html;
|
|
}
|
|
|
|
|
|
/**
|
|
* 响应操作
|
|
$_REQUEST["Priv1"] 为 log_id
|
|
*/
|
|
function respond()
|
|
{
|
|
$payment = get_payment($_GET['code']);
|
|
$merid=$this->config($payment);
|
|
$flag = buildKey(PUB_KEY);
|
|
//获取交易应答的各项值
|
|
$merid = $_REQUEST["merid"];
|
|
$orderno = $_REQUEST["orderno"];
|
|
$transdate = $_REQUEST["transdate"];
|
|
$amount = $_REQUEST["amount"];
|
|
$currencycode = $_REQUEST["currencycode"];
|
|
$transtype = $_REQUEST["transtype"];
|
|
$status = $_REQUEST["status"];
|
|
$checkvalue = $_REQUEST["checkvalue"];
|
|
$gateId = $_REQUEST["GateId"];
|
|
$priv1 = $_REQUEST["Priv1"];
|
|
$flag = verifyTransResponse($merid, $orderno, $amount, $currencycode, $transdate, $transtype, $status, $checkvalue);
|
|
if( flag && $status == '1001')
|
|
{
|
|
// 检查价格是否一致
|
|
if (!check_money($priv1, $amount/100))
|
|
{
|
|
return false;
|
|
}
|
|
order_paid($priv1, 2);
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
/**
|
|
* 格式订单号
|
|
*/
|
|
function _formatSN($sn)
|
|
{
|
|
return str_repeat('0', 9 - strlen($sn)) . $sn;
|
|
}
|
|
|
|
function sign($params,$security_key,$sign_method)
|
|
{
|
|
if (strtolower($sign_method) == "md5")
|
|
{
|
|
ksort($params);
|
|
$sign_str = "";
|
|
$sign_ignore_params=array('bank','signMethod','signature');
|
|
foreach ($params as $key => $val)
|
|
{
|
|
if (in_array($key,$sign_ignore_params))
|
|
{
|
|
continue;
|
|
}
|
|
$sign_str .= sprintf("%s=%s&", $key, $val);
|
|
}
|
|
return md5($sign_str . md5($security_key));
|
|
}
|
|
else
|
|
{
|
|
exit("Unknown sign_method set in quickpay_conf");
|
|
}
|
|
}
|
|
|
|
}
|
|
?>
|