frontend\controllers\PaymentController::actionWebhooks PHP Method

actionWebhooks() public method

public actionWebhooks ( )
    public function actionWebhooks()
    {
        Yii::$app->response->format = Response::FORMAT_RAW;
        $data = file_get_contents("php://input");
        $signature = Yii::$app->request->headers->get('x-pingplusplus-signature');
        $pubKey = file_get_contents(Yii::getAlias(Yii::$app->params['pingpp.publicKeyPath']));
        // Verify signature
        $result = openssl_verify($data, base64_decode($signature), $pubKey, 'sha256');
        if ($result !== 1) {
            Yii::$app->response->statusCode = 403;
            return;
        }
        $event = json_decode($data);
        if (!isset($event->type)) {
            Yii::$app->response->statusCode = 400;
            return;
        }
        switch ($event->type) {
            case "charge.succeeded":
                $charge = $event->data->object;
                $model = Order::findOne(['order_sn' => $charge->order_no]);
                if ($model) {
                    if ($charge->paid && $model->pay()) {
                        $this->_sendMsg($model);
                        Yii::info("订单支付成功!订单号:{$charge->order_no}");
                        return;
                    } else {
                        Yii::error("订单支付失败!订单号:{$charge->order_no}");
                    }
                }
                break;
            default:
                break;
        }
        Yii::$app->response->statusCode = 400;
        return;
    }