public function callback() { Log::record('cftpay callback get:' . print_r($_GET, true)); Log::save(); // 由于二级域名redirect的原因,我们会自动在GET参数里添加shop=merchant_code,需要显示的去掉该参数 unset($_GET['shop']); unset($_GET['_URL_']); $out_trade_no = $_GET['sp_billno']; $transaction_id = $_GET['transaction_id']; if (empty($out_trade_no) || empty($transaction_id)) { echo 'fail'; exit; } // verify whether trade record existing in our db for <order_sn> $trade = M('b2c_cfttrade')->where(array('order_sn' => $out_trade_no, 'transaction_id' => $transaction_id))->find(); if (empty($trade)) { Log::record('cftpay callback non existing order_sn get:' . print_r($_GET, true)); Log::save(); $this->error('非法订单号', U('Wap/Shop/error')); } $DECODED_GET = array(); foreach ($_GET as $k => $v) { $DECODED_GET[$k] = urldecode($v); } import("@.ORG.CftWapPayHelper"); // url signature verification $cftWapPayHelper = new CftWapPayHelper($trade['partnerId'], $trade['partnerkey']); foreach ($DECODED_GET as $k => $v) { $cftWapPayHelper->setParameter($k, $v); } if (!$cftWapPayHelper->isTenpaySign()) { // sign mismatch Log::record('cftpay callback url sign mismatch: .GET:' . print_r($_GET, true)); Log::save(); echo 'fail'; exit; } Log::record('cftpay callback url sign verification passed!', Log::INFO); Log::save(); $audit['trade_callback_timestamp'] = time(); $audit['trade_callback_times'] = $trade['trade_callback_times'] + 1; M('b2c_cfttrade')->where(array('id' => $trade['id']))->save($audit); $host_name = C('wx_handler_server'); // update trade table for tracking if ($trade['n_pay_result'] == 0) { $redirect = WapAction::generatePayResultUrl('Shop/my', $trade['token'], array('token' => $trade['token'], 'wecha_id' => $trade['wecha_id'], 'success' => 1)); $this->redirect($redirect); //$this->success('交易成功',U('Wap/Shop/index',array('shop'=> $trade['token'],'wecha_id'=>$trade['wecha_id']))); } else { $redirect = WapAction::generatePayResultUrl('Shop/my', $trade['token'], array('token' => $trade['token'], 'wecha_id' => $trade['wecha_id'], 'success' => 0)); $this->redirect($redirect); //$this->error('交易失败',U('Wap/Shop/index',array('shop'=> $trade['token'],'wecha_id'=>$trade['wecha_id']))); } }