如何将 instamojo 支付网关与 codeigniter 休息服务器集成?

How to integrate instamojo payment gateway with codeigniter rest server?

我正在尝试将 Instamojo 支付网关 集成到 Chris Kacerguis 的 REST 服务器中。

问题:

下面的代码:

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 服务器 Post 方法中重定向?

2) 如果以上都可以,那么我的代码有什么问题?

3) 还有其他方法可以实现我想要做的事情吗?

我在 Internet 上找到了很多教程,但是 none 其中使用的是 REST 服务器。

我在谷歌搜索时偶然发现了这个问题。我也遇到了同样的问题,下面是我的解决方法。

注意:这不完全是一种解决方案,而是一种变通方法。我也承认这可能不是最好的解决方案,但它对我有用。

从 Rest Server 返回付款 url,并且 从 Rest Client[=] 重定向到 url 34=].

休息客户端代码:

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

休息服务器代码:

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 是开放的。如果不是,请确保在调用 curl 时传递您的凭据。

更新

感谢@AshwiniChaudhary 在下面的评论,其中指出:

REST APIs are not meant for redirection. REST API returns JSON, XML etc and the receiver takes care of whatever is supposed to be done.

事实背后的真正原因,"why REST Server is not letting us to perform the redirect",变得非常清楚。