function toSubmit($payment) { $merId = $this->getConf($payment["M_OrderId"], 'member_id'); $MerPrk = $this->getConf($payment["M_OrderId"], 'MerPrk'); $PubPk = $this->getConf($payment["M_OrderId"], 'PubPk'); $TransType = '0001'; if (!$payment['M_Time']) { $payment['M_Time'] = time(); } $ordId = $this->intString(substr($merId, -5) . substr(date("YmdHis", $payment['M_Time']), -7), 16); $payment['M_Amount'] = $this->intString($payment['M_Amount'] * 100, 12); if (strtoupper(substr(PHP_OS, 0, 3)) == "WIN") { $chinapay = new COM('CPNPC.NPC'); if (file_exists(dirname(__FILE__) . "/../../../home/upload/chinapay/" . $MerPrk) && file_exists(dirname(__FILE__) . "/../../../home/upload/chinapay/" . $MerPrk)) { $chinapay->setMerKeyFile(dirname(__FILE__) . "/../../../home/upload/chinapay/" . $MerPrk); $chinapay->setPubKeyFile(dirname(__FILE__) . "/../../../home/upload/chinapay/" . $PubPk); } elseif (file_exists(dirname(__FILE__) . "/../../../cert/chinapay/" . $MerPrk) && file_exists(dirname(__FILE__) . "/../../../cert/chinapay/" . $MerPrk)) { $chinapay->setMerKeyFile(dirname(__FILE__) . "/../../../cert/chinapay/" . $MerPrk); $chinapay->setPubKeyFile(dirname(__FILE__) . "/../../../cert/chinapay/" . $PubPk); } $chkvalue = $chinapay->sign($merId, $ordId, $payment['M_Amount'], $this->supportCurrency[$payment['M_Currency']], date("Ymd", $payment['M_Time']), $TransType); //商户号,订单号,交易金额,货币代码,交易日期,交易类型 } else { //if (file_exists(dirname(__FILE__)."/../../../home/upload/chinapay/".$MerPrk)&&file_exists(dirname(__FILE__)."/../../../home/upload/chinapay/".$MerPrk)){ if (file_exists(HOME_DIR . "/upload/chinapay/" . $MerPrk) && file_exists(HOME_DIR . "/upload/chinapay/" . $PubPk)) { //setMerKeyFile(dirname(__FILE__)."/../../../home/upload/chinapay/".$MerPrk); //setPubKeyFile(dirname(__FILE__)."/../../../home/upload/chinapay/".$PubPk); setMerKeyFile(HOME_DIR . "/upload/chinapay/" . $MerPrk); setPubKeyFile(HOME_DIR . "/upload/chinapay/" . $PubPk); } elseif (file_exists(dirname(__FILE__) . "/../../../cert/chinapay/" . $MerPrk) && file_exists(dirname(__FILE__) . "/../../../cert/chinapay/" . $MerPrk)) { setMerKeyFile(dirname(__FILE__) . "/../../../cert/chinapay/" . $MerPrk); setPubKeyFile(dirname(__FILE__) . "/../../../cert/chinapay/" . $PubPk); } $chkvalue = signOrder($merId, $ordId, $payment['M_Amount'], $this->supportCurrency[$payment['M_Currency']], date("Ymd", $payment['M_Time']), $TransType); //商户号,订单号,交易金额,货币代码,交易日期,交易类型 } switch ($chkvalue) { case '-100': $errinfo = '环境变量"NPCDIR"未设置'; break; case '-101': $errinfo = '商户密钥文件不存在或无法打开'; break; case '-102': $errinfo = '密钥文件格式错误'; break; case '-103': $errinfo = '秘钥商户号和用于签名的商户号不一致'; break; case '-130': $errinfo = '用于签名的字符串长度为空'; break; case '-111': $errinfo = '没有设置秘钥文件路径,或者没有设置“NPCDIR”环境变量'; break; default: break; } if ($errinfo) { header("Content-Type:text/html;charset=utf-8"); echo $errinfo; $this->_succ = true; exit; } $return['MerId'] = $merId; $return['OrdId'] = $ordId; $return['TransAmt'] = $payment['M_Amount']; $return['CuryId'] = $this->supportCurrency[$payment['M_Currency']]; $return['TransDate'] = date("Ymd", $payment['M_Time']); $return['TransType'] = $TransType; $return['Version'] = '20040916'; //$return['BgRetUrl'] = '';//$this->serverCallbackUrl; $return['PageRetUrl'] = $this->callbackUrl; $return['GateId'] = ''; $return['Priv1'] = $payment['M_OrderId']; $return['ChkValue'] = $chkvalue; return $return; }
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'); }