我正在尝试在 Chris Kacerguis的REST服务器中集成Instamojo支付网关。
问题:
以下代码:
public function instamojotest_post()
{
$api = new Instamojo\Instamojo(‘abcd1234’, ‘efgh5678’, 'https://test.instamojo.com/api/1.1/');
try {
$response = $api->paymentRequestCreate([
'amount' => 100,
'purpose' => 'New Product Purchase',
'buyer_name' => 'Test User',
'email' => 'testuser@gmail.com',
'phone' => '9876543210',
'redirect_url' => 'http://www.example.com/products_api/validate_payment'
]);
header('Location: ' . $response['longurl']);
} catch (Exception $e) {
$this->response([
'success' => false,
'message' => $e->getMessage()
], 500);
}
}
未重定向到Instamojo付款网站,并且未显示任何错误。
它工作正常并且使用vanilla CodeIgniter成功重定向。
问题:
1)是否可以从REST服务器后期方法中重定向?
2)如果以上是可能的,那么我的代码出了什么问题?
3)有没有其他方法可以实现我想要做的事情?
我在互联网上发现了许多教程,但没有一个使用REST服务器。
答案 0 :(得分:1)
谷歌搜索时我偶然发现了这个问题。我也面临同样的问题,这就是我如何解决它。
注意:这不是一个解决方案,而是一种解决方法。我也承认这可能不是最好的解决方案,但它对我有用。
我从Rest服务器返回付款网址,从Rest Client 重定向到网址。
休息客户代码:
class Test extends CI_Controller
{
public function instamojo_make_payment()
{
$url = "http://www.example.com/products_api/instamojotest";
$params = []; //You will obviously be needing this in real life implementation :)
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 1);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
if ($response['success'])
header('Location: ' . $response['payment_url']);
else
$this->load->view('payment_failed_page');
}
}
Rest服务器代码:
class Products_api extends REST_Controller
{
public function instamojotest_post()
{
$api = new Instamojo\Instamojo('abcd1234', 'efgh5678', 'https://test.instamojo.com/api/1.1/');
try {
$response = $api->paymentRequestCreate([
//Make sure to pass these data from the Rest Client
'amount' => 100,
'purpose' => 'New Product Purchase',
'buyer_name' => 'Test User',
'email' => 'testuser@gmail.com',
'phone' => '9876543210',
'redirect_url' => 'http://www.example.com/products_api/validate_payment'
]);
$this->response([
'success' => true,
'payment_url' => $response['longurl']
], 200);
} catch (Exception $e) {
$this->response([
'success' => false,
'message' => $e->getMessage()
], 500);
}
}
}
在给出这个答案的同时,我认为Api是开放的。如果不是,请确保在进行卷曲调用时传递凭据。
<强>更新强>
感谢@ AshwiniChaudhary的评论,其中指出:
REST API不适用于重定向。 REST API返回JSON,XML 等等,接收者负责应该做的事情。
事实背后的实际原因,&#34;为什么REST服务器不允许我们执行重定向&#34;,变得非常清楚。