Пример #1
0
 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');
 }