示例#1
0
 public function wxUnified()
 {
     if ($_SERVER['REQUEST_METHOD'] != 'POST') {
         exit;
     }
     $data = file_get_contents('php://input');
     libxml_disable_entity_loader(true);
     $data = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
     $data = json_encode($data);
     Log::pay('wexin unified pay notify raw data: ' . $data);
     $data = json_decode($data, true);
     $sign = WxSDK::sign($data, WX_PAY_KEY);
     if ($data['sign'] != $sign) {
         Log::pay('wexin unified pay notify error : sign failed! ' . json_encode($data));
         echo '<xml><return_code>FAIL</return_code><return_msg>sign fail</return_msg></xml>';
         return;
     }
     if ($data['return_code'] != 'SUCCESS') {
         Log::pay('wexin unified pay notify fail : ' . json_encode($data));
         echo '<xml><return_code>FAIL</return_code><return_msg>return fail</return_msg></xml>';
         return;
     }
     if ($data['result_code'] != 'SUCCESS') {
         Log::pay('wexin unified pay notify fail : ' . json_encode($data));
         echo '<xml><return_code>FAIL</return_code><return_msg>result fail</return_msg></xml>';
         return;
     }
     $transactionId = $data['transaction_id'];
     $nk = Nosql::NK_PAY_NOTIFY_DE_DUPLICATION . $data['out_trade_no'];
     $nk = Nosql::get($nk);
     if (!empty($nk)) {
         echo '<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>';
         Log::pay('wexin unified pay notify ok(had handled) : ' . json_encode($data));
         return;
     }
     if ($this->onPayNotifyOk($data['out_trade_no'], $data['total_fee'], $data['cash_fee']) === true) {
         // 订单现金支付金额
         Nosql::setex($nk, Nosql::NK_PAY_NOTIFY_DE_DUPLICATION_EXPIRE, 'x');
         echo '<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>';
         Log::pay('wexin unified pay notify success : ' . json_encode($data));
         return;
     }
     if ($data['is_subscribe'] == 'N' && $data['trade_type'] == 'JSAPI') {
         $this->onWxPayOkUnSubscribe($data['openid'], $data['out_trade_no']);
     }
     echo '<xml><return_code>FAIL</return_code><return_msg>handle fail</return_msg></xml>';
     Log::pay('wexin unified pay notify fail : ' . json_encode($data));
 }