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'])));
     }
 }