我需要在我的cakePHP 2.6 webapp中实施xsolla支付解决方案 根据合同,我的网站应该通过REST与Xsolla进行沟通。
Xsolla对同一个网址(例如http://example.com/rest)执行所有请求并指定JSON正文中的请求类型,
例如来自Xsolla的请求:
URL: http://example.com/rest
Accept: application/json
Content-Type: application/json
Content-Length: 78
Authorization: Signature 8189119fb35327cdee7787990df41001c4bd9122
{"data":{"notification_type":"user_validation","user":{"id":"user_id"}}}
如果用户ID无效,我应该返回带有错误代码的 HTTP / 1.1 400错误请求;如果用户ID有效,我应该返回 HTTP / 1.1 200 OK 。
/>
notification_type
可以是user_validation
,payment
等等
我在单个函数xsolla中实现了XsollaController.php中的所有通信:
//XsollaController.php:
public function xsolla() {
//...
$data = $this->request->data;
if(array_key_exists("notification_type", $data) &&
$data["notification_type"]=="user_validation") {
//user_validation
}
else if(array_key_exists("notification_type", $data) &&
$data["notification_type"]=="payment") {
//payment
}
//...
}
如何根据notification_type
提供不同的功能?
例如函数userValidation($data)
,payment($data)
等。
使用指定的HTTP代码返回简单JSON的正确方法是什么?
现在我做以下事项:
if(userIdIsValid($userID)) {
$body = array('data' => array('user' => array(
"id"=>$data["user"]["id"]), 'message' => 'USER_IS_VALID'));
$this->response->type('json');
$this->response->statusCode(200);
$this->response->body(json_encode($body));
$this->response->send();
$this->_stop();
exit();
}
else {
$body = array('error' => array(
'code' => 'INVALID_USER',
'message' => 'INVALID_USER',
'user' => array("id"=>$data["user"]["id"])));
$this->response->type('json');
$this->response->statusCode(400);
$this->response->body(json_encode($body));
$this->response->send();
$this->_stop();
exit();
}
我的代码有效,但似乎是硬编码的。我相信CakePHP提供了一种更好的方法。
答案 0 :(得分:0)
关于基于notification_type
执行不同功能的第一个问题,你几乎就在那里(除非我过分简化你的问题)。
//XsollaController.php:
public function xsolla() {
//...
$data = $this->request->data;
if(array_key_exists("notification_type", $data) &&
$data["notification_type"]=="user_validation") {
$this->userValidation($data);
}
else if(array_key_exists("notification_type", $data) &&
$data["notification_type"]=="payment") {
$this->payment($data);
}
//...
}
private function userValidation($data) {
// user validation
}
private function payment($data) {
// payment
}
至于使用JSON内容和正确的HTTP状态代码进行响应,您的代码看起来很好。有一些小改进的空间,但如果它有功能,我就离开它。您正在设置响应代码。如果你想要真正的"蛋糕"使用JSON内容进行响应的方法,请阅读CakePHP文档中的JSON and XML views。