public function cftpay() { $order_sn = $_GET['order_sn']; $token = $this->token; $wecha_id = $this->wechat_id; Log::record('startCftpay: ' . $token . ':' . $order_sn . ':' . $wecha_id); Log::save(); if (empty($order_sn) || empty($token)) { $this->error('请输入订单号'); } $order = M('b2c_order')->where(array('sn' => $order_sn, 'token' => $token, 'status' => 1))->find(); if (!$order) { $this->error('订单号不正确'); } $shop = M('b2c_shop')->where(array('token' => $token))->find(); if (!$shop) { $this->error('商城不存在'); } $payment_where = array('token' => $token, 'pay_code' => 'cftpay'); if (!empty($this->branch_id)) { $payment_where['branch_id'] = $this->branch_id; } $payment = M('b2c_payment')->where($payment_where)->find(); $wxpay_config = unserialize($payment['pay_config']); if (empty($wxpay_config)) { $this->error('商家信息设置有误!请联系商家客服!'); } $partnerId = $wxpay_config['partnerId']; $partnerKey = $wxpay_config['partnerKey']; // cft pay init parameter list $ver = '2.0'; $charset = '1'; $bank_type = '0'; $desc = $this->getOrderDesc($order['order_id']); // purchaser_id $bargainor_id = $partnerId; $sp_billno = $order_sn; $total_fee = intval(floatval($order['price']) * 100); //分 $fee_type = "1"; $notify_url = $this->generatePayUrl('cftpay/notify'); $callback_url = $this->generatePayUrl('cftpay/callback'); // attach //$time_start = date('YmdHs', time()); // time_expire // add audit for Cft Pay. $trade = M('b2c_cfttrade')->where(array('order_sn' => $order_sn, 'token' => $token))->find(); if ($trade['n_transaction_id']) { $this->error('已支付'); } import("@.ORG.CftWapPayHelper"); $cftWapPayHelper = new CftWapPayHelper($partnerId, $partnerKey); $cftWapPayHelper->setParameter('ver', $ver); $cftWapPayHelper->setParameter('charset', $charset); $cftWapPayHelper->setParameter('bank_type', $bank_type); $cftWapPayHelper->setParameter('desc', $desc); $cftWapPayHelper->setParameter('bargainor_id', $bargainor_id); $cftWapPayHelper->setParameter('sp_billno', $sp_billno); $cftWapPayHelper->setParameter('total_fee', strval($total_fee)); $cftWapPayHelper->setParameter('fee_type', $fee_type); $cftWapPayHelper->setParameter('notify_url', $notify_url); $cftWapPayHelper->setParameter('callback_url', $callback_url); $cft_tokenId = $cftWapPayHelper->getTokenId(); Log::record('cftpay start token:' . $token . ' outorder:' . $order_sn . ' wecha_id:' . $wecha_id . ' token_id:' . $cft_tokenId, Log::INFO); Log::save(); if (empty($cft_tokenId)) { $this->error('服务器忙!请刷新重试!'); } if ($trade == null) { $time = time(); // 微信参数 $data['token'] = $token; $data['wecha_id'] = $wecha_id; // 协议参数 $data['partnerId'] = $partnerId; $data['partnerkey'] = $partnerKey; // 订单详情 $data['order_sn'] = $order_sn; $data['ver'] = $ver; $data['charset'] = $charset; $data['bank_type'] = $bank_type; $data['desc'] = $desc; $data['total_fee'] = $total_fee; $data['fee_type'] = $fee_type; $data['token_id'] = $cft_tokenId; // 订单状态追踪 $data['create_time'] = $time; $data['trade_start_times'] = 1; $ret = M('b2c_cfttrade')->add($data); } else { $ret = M('b2c_cfttrade')->where(array('id' => $trade['id']))->setInc('trade_start_times'); } if ($ret === FALSE) { Log::record('cftpay fail.r/w db fail. order_sn:' . $order_sn . ' err:' . M('b2c_cfttrade')->getDbError()); Log::save(); $this->error('服务器忙!请稍后重试!'); } header("Location:" . "https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_gate.cgi?token_id=" . $cft_tokenId); }