Esempio n. 1
0
File: Micro.php Progetto: ljimmy/pay
 /**
  *
  * 提交刷卡支付,并且确认结果
  * @param MicroPay $microPayInput
  * @throws Exception
  * @return 返回查询接口的结果
  */
 public function pay($microPayInput)
 {
     //①、提交被扫支付
     $result = Api::micropay($microPayInput, 5);
     //如果返回成功
     if (!array_key_exists("return_code", $result) || !array_key_exists("result_code", $result)) {
         throw new Exception("接口调用失败,请确认是否输入是否有误!");
     }
     //②、接口调用成功,明确返回调用失败
     if ($result["return_code"] == "SUCCESS" && $result["result_code"] == "FAIL" && $result["err_code"] != "USERPAYING" && $result["err_code"] != "SYSTEMERROR") {
         if (isset($result['err_code_des'])) {
             throw new Exception($result['err_code_des']);
         }
         return false;
     }
     //签名验证
     $out_trade_no = $microPayInput->GetOut_trade_no();
     //③、确认支付是否成功
     $queryTimes = 10;
     while ($queryTimes > 0) {
         $queryTimes++;
         $succResult = 0;
         $queryResult = $this->query($out_trade_no, $succResult);
         //如果需要等待1s后继续
         if ($succResult == 2) {
             sleep(2);
             continue;
         } else {
             if ($succResult == 1) {
                 //查询成功
                 return $queryResult;
             } else {
                 //订单交易失败
                 return false;
             }
         }
     }
     //④、次确认失败,则撤销订单
     if (!$this->cancel($out_trade_no)) {
         throw new Exception("撤销单失败!");
     }
     return false;
 }