/** * 指定の注文について 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; }