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;
}