Exemplo n.º 1
0
 /**
  * 付款完成通知
  * %數請參考 https://www.allpay.com.tw/Business/payment_fees
  * 
  * @Route("/que/return", name="front_que_return", options={"expose"=true})
  */
 public function returnAction(Request $request)
 {
     $adapter = new Adapter();
     $adapter->init($this->container->getParameter('allpay_hashkey'), $this->container->getParameter('allpay_hashiv'), $this->container->getParameter('allpay_merchantid'), true);
     //$adapter->initTest();
     $fp = fopen($request->server->get('DOCUMENT_ROOT') . '/uploads/' . date('Y-m-d H:i:s') . '.txt', 'w');
     fwrite($fp, json_encode($_POST) . "\r\n");
     if (!$adapter->isValid($_POST)) {
         fwrite($fp, "\r\n" . '檢查碼錯誤:' . "\r\n" . $adapter->getCheckVal($_POST) . "\r\n" . $_POST['ChechMacValue']);
         fclose($fp);
         throw new \Exception('valid error');
     }
     fwrite($fp, "\r\n" . '檢查碼正確');
     $post = $request->request;
     if ($post->get('RtnCode') != 1) {
         fwrite($fp, "\r\n" . '狀態碼錯誤');
         fclose($fp);
         return new Response('0|ErrorMessage');
     }
     fwrite($fp, "\r\n" . '狀態碼正確');
     $invoiceSn = $post->get('MerchantTradeNo');
     $em = $this->getDoctrine()->getManager();
     $invoice = $em->getRepository('WoojinOrderBundle:Invoice')->findOneBy(array('sn' => $invoiceSn));
     if (!$invoice) {
         fwrite($fp, "\r\n" . '兄弟我找不到發票');
         fclose($fp);
         return new Response('0|ErrorMessage');
     }
     try {
         $invoice->setTradeNo($post->get('TradeNo'))->setPaymentType($post->get('PaymentType'))->setPayAt(new \DateTime($post->get('PaymentDate')))->setStatus(Avenue::IV_GET);
         foreach ($invoice->getOrders() as $order) {
             $order->setPaid($order->getRequired())->setOrgPaid($order->getOrgRequired())->setStatus($em->getRepository('WoojinOrderBundle:OrdersStatus')->find(Avenue::OS_COMPLETE));
             $em->persist($order);
         }
         $em->persist($invoice);
         $em->flush();
         fwrite($fp, "\r\n" . '應該要成功才對, 這是交易編號' . $invoice->getTradeNo());
         fclose($fp);
     } catch (\Exception $e) {
         fwrite($fp, "\r\n" . $e->getMessage() . $invoice->getTradeNo());
         fclose($fp);
     }
     // 發送通知信給店長處理
     $notifier = $this->get('avenue.notifier');
     $notifier->ship($invoice);
     return new Response('1|OK');
 }