Example #1
0
 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 = "";
     $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;
 }
Example #2
0
<?php

defined('IN_DESTOON') or exit('Access Denied');
require DT_ROOT . '/api/pay/' . $bank . '/netpayclient_config.php';
//加载 netpayclient 组件
require DT_ROOT . '/api/pay/' . $bank . '/netpayclient.php';
//导入私钥文件, 返回值即为您的商户号,长度15位
$merid = buildKey(PRI_KEY);
$merid or exit('导入私钥文件失败!');
//生成订单号,定长16位,任意数字组合,一天内不允许重复,本例采用当前时间戳,必填
$ordid = "00" . date('YmdHis');
//订单金额,定长12位,以分为单位,不足左补0,必填
$transamt = padstr($charge * 100, 12);
//货币代码,3位,境内商户固定为156,表示人民币,必填
$curyid = "156";
//订单日期,本例采用当前日期,必填
$transdate = date('Ymd');
//交易类型,0001 表示支付交易,0002 表示退款交易
$transtype = "0001";
//接口版本号,境内支付为 20070129,必填
$version = "20070129";
//页面返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,银行页面会自动跳转到该页面,并POST订单结果信息,可选
$pagereturl = $receive_url;
//后台返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,我方服务器会POST订单结果信息到该页面,必填
$bgreturl = DT_PATH . 'api/pay/' . $bank . '/notify.php';
/************************
页面返回地址和后台返回地址的区别:
后台返回从我方服务器发出,不受用户操作和浏览器的影响,从而保证交易结果的送达。
************************/
//支付网关号,4位,上线时建议留空,以跳转到银行列表页面由用户自由选择,本示例选用0001农商行网关便于测试,可选
$gateid = "";
}
//需要查询的订单号,16位长,必填
$ordid = $_REQUEST["ordid"];
//订单日期,8位长,必填
$transdate = $_REQUEST["transdate"];
//退款金额,必须小于原始交易金额,12位长,不足左补0,必填
$refundamount = $_REQUEST["refundamount"];
//交易类型,4位长,此处表示退款方式 0002 为全额退款,0102 为部分退款,必填
$transtype = $_REQUEST["transtype"];
//备注,退款时用作退款流水号,一天内不可重复,最长40位,必填,此处使用当前时间戳仅用作演示
$priv1 = date('YmdHis');
if ($transdate == '') {
    $transdate = date('Ymd');
}
if ($refundamount == '') {
    $refundamount = padstr('1', 12);
}
if ($transtype == '') {
    $transtype = '0002';
}
?>
<form action="" method="get">
<label>退款流水</label><br/>
<input type="text" name="priv1" value="<?php 
echo $priv1;
?>
"><br/>
<label>订单日期</label><br/>
<input type="text" name="transdate" value="<?php 
echo $transdate;
?>
Example #4
0
	echo "货币代码: [$currencycode]<br/>";
	echo "交易类型: [$transtype]<br/>";
	echo "交易状态: [$status]<br/>";
	echo "网关号: [$gateId]<br/>";
	echo "备注: [$priv1]<br/>";
	echo "签名值: [$checkvalue]<br/>";
	echo "===============================<br/>";
*/
//验证签名值,true 表示验证通过
$flag = verifyTransResponse($merid, $orderno, $amount, $currencycode, $transdate, $transtype, $status, $checkvalue);
if ($flag) {
    if ($status == '1001') {
        //您的处理逻辑请写在这里,如更新数据库等。
        //注意:如果您在提交时同时填写了页面返回地址和后台返回地址,且地址相同,请在这里先做一次数据库查询判断订单状态,以防止重复处理该笔订单
        if ($priv1 != $charge_orderid) {
            $charge_status = 2;
            $charge_errcode = '订单号不匹配';
            $note = $charge_errcode . 'S:' . $charge_orderid . 'R:' . $priv1;
            log_write($note, 'rchinapay');
        } else {
            if ($amount != padstr($charge_money * 100, 12)) {
                $charge_status = 2;
                $charge_errcode = '充值金额不匹配';
                $note = charge_errcode . 'S:' . $charge_money . 'R:' . $amount;
                log_write($note, 'rchinapay');
            } else {
                $charge_status = 1;
            }
        }
    }
}
Example #5
0
 /**
  * @see paymentplugin::getSendData()
  */
 public function getSendData($payment)
 {
     //导入私钥文件, 返回值即为您的商户号,长度15位
     $merid = buildKey(self::PRI_KEY);
     if (!$merid) {
         exit("导入私钥文件失败!");
     }
     $return = array('MerId' => $merid, 'CuryId' => "156", 'TransDate' => date('Ymd'), 'TransType' => '0001', 'Version' => '20141120', 'PageRetUrl' => $this->callbackUrl, 'BgRetUrl' => $this->serverCallbackUrl, 'GateId' => '');
     $return['Priv1'] = $payment['M_OrderNO'];
     //备注,最长60位,交易成功后会原样返回,可用于额外的订单跟踪等
     $return['OrdId'] = padstr($payment['M_OrderId'], 16);
     //商户订单号,定长16位
     $return['TransAmt'] = padstr($payment['M_Amount'] * 100, 12);
     //订单金额,定长12位,以分为单位,不足左补0
     // 签名
     //按次序组合订单信息为待签名串
     $plain = $return['MerId'] . $return['OrdId'] . $return['TransAmt'] . $return['CuryId'] . $return['TransDate'] . $return['TransType'] . $return['Version'] . $return['BgRetUrl'] . $return['PageRetUrl'] . $return['GateId'] . $return['Priv1'];
     //生成签名值
     $chkvalue = sign($plain);
     if (!$chkvalue) {
         exit("签名失败!");
     }
     $return['ChkValue'] = $chkvalue;
     return $return;
 }
Example #6
0
function rsa_decrypt($input)
{
    global $private_key;
    $check = bchexdec($input);
    $modulus = bin2int($private_key["modulus"]);
    $exponent = bchexdec("010001");
    $result = bcpowmod($check, $exponent, $modulus);
    $rb = bcdechex($result);
    return strtoupper(padstr($rb));
}
include_once "netpayclient_config.php";
?>
<title>支付交易</title>
<?php 
//加载 netpayclient 组件
include_once "netpayclient.php";
//导入私钥文件, 返回值即为您的商户号,长度15位
$merid = buildKey(PRI_KEY);
if (!$merid) {
    echo "导入私钥文件失败!";
    exit;
}
//生成订单号,定长16位,任意数字组合,一天内不允许重复,本例采用当前时间戳,必填
$ordid = "00" . date('YmdHis');
//订单金额,定长12位,以分为单位,不足左补0,必填
$transamt = padstr('1', 12);
//货币代码,3位,境内商户固定为156,表示人民币,必填
$curyid = "156";
//订单日期,本例采用当前日期,必填
$transdate = date('Ymd');
//交易类型,0001 表示支付交易,0002 表示退款交易
$transtype = "0001";
//接口版本号,境内支付为 20070129,必填
$version = "20070129";
//页面返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,银行页面会自动跳转到该页面,并POST订单结果信息,可选
$pagereturl = "{$site_url}/netpayclient_order_feedback.php";
//后台返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,我方服务器会POST订单结果信息到该页面,必填
$bgreturl = "{$site_url}/netpayclient_order_feedback.php";
/************************
	页面返回地址和后台返回地址的区别:
	后台返回从我方服务器发出,不受用户操作和浏览器的影响,从而保证交易结果的送达。
Example #8
0
 public function config($config = null)
 {
     //导入私钥文件, 返回值即为您的商户号,长度15位
     $merid = buildKey(PRI_KEY);
     if (!$merid) {
         echo "导入私钥文件失败!";
         exit;
     }
     //生成订单号,定长16位,任意数字组合,一天内不允许重复,本例采用当前时间戳,必填
     //$ordid = "00" . date('YmdHis');
     $ordid = $config['code'];
     //$ordid='0000'.'90265'.time();
     //$ordid=substr($ordid, 0,16);
     //订单金额,定长12位,以分为单位,不足左补0,必填
     //$transamt = $config['money'];
     $money = $config['money'] * 100;
     $transamt = padstr($money, 12);
     //货币代码,3位,境内商户固定为156,表示人民币,必填
     $curyid = "156";
     //订单日期,本例采用当前日期,必填
     $transdate = date('Ymd');
     //交易类型,0001 表示支付交易,0002 表示退款交易
     $transtype = "0001";
     //接口版本号,境内支付为 20070129,必填
     $version = "20070129";
     //页面返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,银行页面会自动跳转到该页面,并POST订单结果信息,可选
     $pagereturl = $config['ReturnUrl'];
     //后台返回地址(您服务器上可访问的URL),最长80位,当用户完成支付后,我方服务器会POST订单结果信息到该页面,必填
     $bgreturl = $config['NotifyUrl'];
     /************************
     	页面返回地址和后台返回地址的区别:
     	后台返回从我方服务器发出,不受用户操作和浏览器的影响,从而保证交易结果的送达。
     	************************/
     //支付网关号,4位,上线时建议留空,以跳转到银行列表页面由用户自由选择,本示例选用0001农商行网关便于测试,可选
     $gateid = "0001";
     //备注,最长60位,交易成功后会原样返回,可用于额外的订单跟踪等,可选
     $priv1 = "memo";
     //按次序组合订单信息为待签名串
     $plain = $merid . $ordid . $transamt . $curyid . $transdate . $transtype . $priv1;
     //生成签名值,必填
     $chkvalue = sign($plain);
     if (!$chkvalue) {
         echo "签名失败!";
         exit;
     }
     //$uri = REQ_URL_PAY ;
     //$useragent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
     //echo $uri;
     //die();
     // 参数数组
     $data = array('MerId' => $merid, 'Version' => $version, "OrdId" => $ordid, "TransAmt" => $transamt, "CuryId" => $curyid, "TransDate" => $transdate, "TransType" => $transtype, "BgRetUrl" => $bgreturl, "PageRetUrl" => $pagereturl, "GateId" => $gateid, "Priv1" => $priv1, "ChkValue" => $chkvalue);
     echo "<form action=" . REQ_URL_PAY . " method='post' id='myform'  >";
     echo "<br>";
     echo "<input type='text' name='MerId' value='" . $merid . "' />";
     echo "<br>";
     echo "<input type='text' name='Version' value='" . $version . "' />";
     echo "<br>";
     echo "<input type='text' name='OrdId' value='" . $ordid . "'/>";
     echo "<br>";
     echo "<input type='text' name='TransAmt' value='" . $transamt . "' />";
     echo "<br>";
     echo "<input type='text' name='CuryId' value='" . $curyid . "'/>";
     echo "<br>";
     echo "<input type='text' name='TransDate' value='" . $transdate . "' />";
     echo "<input type='text' name='TransType' value='" . $transtype . "' />";
     echo "<br>";
     echo "<input type='text' name='BgRetUrl' value='" . $bgreturl . "' />";
     echo "<br>";
     echo "<input type='text' name='PageRetUrl' value='" . $pagereturl . "' />";
     echo "<br>";
     echo "<input type='text' name='GateId' value='" . $gateid . "' />";
     echo "<br>";
     echo "<input type='text' name='Priv1' value='" . $priv1 . "' />";
     echo "<br>";
     echo "<input type='text' name='ChkValue' value='" . $chkvalue . "' />";
     echo "<br>";
     echo "</form>";
     //die();
     echo "<script>";
     echo "document.getElementById('myform').submit();";
     echo "</script>";
     //print_r($data);
     // $ch = curl_init ();
     // // print_r($ch);
     // curl_setopt ( $ch, CURLOPT_URL, $uri );
     // curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
     // //curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     // curl_setopt ( $ch, CURLOPT_POST, 1 );
     // curl_setopt ($ch, CURLOPT_REFERER, $uri);
     // curl_setopt ($ch, CURLOPT_AUTOREFERER, 1);
     // curl_setopt ( $ch, CURLOPT_HEADER, 0 );
     // curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
     // // curl_setopt ($ch, CURLOPT_REFERER, "http://www.php100.com/");
     // curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
     // curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     // $return = curl_exec ( $ch );
     // curl_close ( $ch );
     //print_r($return);
     //die();
 }
 function unionpay1()
 {
     $order_sn = $_GET['order_sn'];
     $token = $this->token;
     $wecha_id = $this->wechat_id;
     if (empty($order_sn)) {
         $this->error('没有订单号');
     }
     $order = M('b2c_order')->where(array('sn' => $order_sn, 'token' => $token, 'status' => 1))->find();
     if (!$order) {
         $this->error('该订单不存在');
     }
     $payment_where = array('token' => $token, 'pay_code' => 'unionpay', 'enabled' => '1');
     $payment = M('b2c_payment')->where($payment_where)->find();
     //$wingpay_config = unserialize($payment['pay_config']);
     if (empty($payment)) {
         $this->error('商家未设置银联支付方式!请联系商家客服!');
     }
     if (version_compare(phpversion(), '5.4.10', '>')) {
         include_once LIB_PATH . 'ORG/Payment/UnionPay/lib.php';
     } else {
         include_once LIB_PATH . 'ORG/Payment/UnionPay/netpayclient.php';
     }
     $merid = buildKey('keys/MerPrK_808080301000216_20141106164338.key');
     if (empty($merid)) {
         $this->error('未设置商户号!');
     }
     $ordid = $this->get_order_no($order['sn']);
     $transamt = padstr($order['price'] * 100, 12);
     //订单交易金额,12位长度,左补0,单位:分
     $curyid = '156';
     //订单交易币种,3位长度,固定为人民币156
     $transdate = date('Ymd');
     $transtype = '0001';
     //交易类型,4位长度,"0001"表示消费交易,"0002"表示退货交易
     $version = '20070129';
     //支付接入版本号20040916,20070129
     $gateid = '8607';
     $priv1 = 'wechat';
     if (!signOrder($merid, $ordid, $transamt, $curyid, $transdate, $transtype)) {
         $this->error('订单签名验证失败!');
     }
     $chkvalue = sign($merid . $ordid . $transamt . $curyid . $transdate . $transtype . $priv1);
     //PageRetUrl 返回支付后的商户网站页面
     if (isset($_GET['fxs_id'])) {
         $pagereturl = C('site_url') . '/index.php/Fxs/Shop/my?token=' . $token . '&fxs_id=' . $_GET['fxs_id'];
     } elseif (isset($_GET['type'])) {
         $pagereturl = C('site_url') . '/index.php/Fxs/Fxs/my?token=' . $token;
     } else {
         $pagereturl = C('site_url') . '/index.php/Wap/Shop/my?token=' . $token;
     }
     //后台接受应答地址,用于商户记录交易信息和处理
     $bgreturl = C('site_url') . '/index.php/unionpay/notify';
     $trade = M('b2c_wingtrade')->where(array('order_sn' => $order_sn, 'token' => $token))->find();
     if ($trade) {
         if ($trade['is_pay']) {
             $this->success('该订单已付款,不能重复付款!');
         }
     } else {
         $serialize = array('MerId' => $merid, 'OrdId' => $ordid, 'TransAmt' => $transamt, 'CuryId' => $curyid, 'TransDate' => $transdate, 'TransType' => $transtype, 'Version' => $version, 'BgRetUrl' => $bgreturl, 'PageRetUrl' => $pagereturl, 'GateId' => $gateid, 'Priv1' => $priv1, 'ChkValue' => $chkvalue);
         $data = array('token' => $token, 'order_sn' => $order_sn, 'is_pay' => '0', 'set_params' => serialize($serialize), 'create_time' => time(), 'update_time' => time());
         M('b2c_wingtrade')->add($data);
     }
     include_once LIB_PATH . "ORG/Payment/UnionPay/UnionPay.php";
     $unionpay = new UnionPay();
     $unionpay->setParameter('MerId', $merid);
     $unionpay->setParameter('OrdId', $ordid);
     $unionpay->setParameter('TransAmt', $transamt);
     $unionpay->setParameter('CuryId', $curyid);
     $unionpay->setParameter('TransDate', $transdate);
     $unionpay->setParameter('TransType', $transtype);
     $unionpay->setParameter('Version', $version);
     $unionpay->setParameter('BgRetUrl', $bgreturl);
     $unionpay->setParameter('PageRetUrl', $pagereturl);
     $unionpay->setParameter('GateId', $gateid);
     $unionpay->setParameter('Priv1', $priv1);
     $unionpay->setParameter('ChkValue', $chkvalue);
     echo $unionpay->_buildForm('web');
 }
Example #10
0
 function set_options($array)
 {
     $array['price'] = padstr($array['price'] * 100, 12);
     $this->option = $array;
 }
Example #11
0
<?php

include_once 'netpayclient.php';
$merid = buildKey('keys/MerPrK_808080301000216_20141106164338.key');
if ($merid) {
    $ordid = "00" . date('YmdHis');
    # Order ID
    $transamt = padstr('4444', 12);
    # Amount
    $curyid = "156";
    # Currency Type, Use CNY
    $transdate = date('Ymd');
    # Order Date
    $transtype = "0001";
    # Transaction type, Consume
    $version = "20070129";
    # Payment Version
    $pagereturl = "http://www.pinet.cc/yinlian/feedback.php";
    # Feedback Url
    $bgreturl = "http://www.pinet.cc/yinlian/feedback.php";
    $priv1 = "Wechat";
    $plain = $merid . $ordid . $transamt . $curyid . $transdate . $transtype . $priv1;
    # The body
    $chkvalue = sign($plain);
    ?>

	<form action="https://payment.ChinaPay.com/pay/TransGet" method="post"> 
		<input type=hidden name="MerId" value="<?php 
    echo $merid;
    ?>
"/>