コード例 #1
0
 /**
  * 指定の注文について WebPay API で課金をおこない、決済を完了する
  * エラーメッセージを返す。
  *
  * @param  \WebPay\WebPay       $objWebPay WebPay client
  * @param  bool                 $authorize trueなら仮売上にする
  * @param  array                $arrPayer  支払方法。'customer' => customer_id か 'card' => token_id
  * @return string|null          決済時に発生したエラーを購入者に説明するメッセージ
  * @throws \WebPay\ApiException 購入者に原因がないエラー(設定ミスによるもの、通信障害によるもの)
  */
 public function createCharge($objWebPay, $authorize, $arrPayer)
 {
     $arrChargeParams = $this->lfComposeChargeParam($authorize, $arrPayer);
     try {
         $objCharge = $objWebPay->chargeCreate($arrChargeParams);
     } catch (\WebPay\ErrorResponse\CardException $e) {
         return $e->getData()->error->message;
     } catch (\WebPay\ErrorResponse\InvalidRequestException $e) {
         if ($e->getData()->error->param == 'card') {
             return '不正な操作が行われたため決済できませんでした。カード情報を再入力してください';
         } elseif ($e->getData()->error->param === 'id' || $e->getData()->error->param === 'customer') {
             return 'カード情報が見付かりませんでした。カード情報を再入力してください';
         } else {
             throw $e;
         }
     }
     $objPurchase = new SC_Helper_Purchase_Ex();
     $updateData = array(MDL_WEBPAY_CHARGE_DATA_COL => $this->lfConvertToDbChargeData($objCharge));
     $objQuery = SC_Query_Ex::getSingletonInstance();
     $objQuery->begin();
     $objPurchase->sfUpdateOrderStatus($this->arrOrder['order_id'], $authorize ? ORDER_PAY_WAIT : ORDER_PRE_END, null, null, $updateData);
     $objQuery->commit();
     $objPurchase->sendOrderMail($this->arrOrder['order_id']);
     return null;
 }