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

时间:2017-08-06 22:48:42

标签: rest codeigniter payment-gateway codeigniter-restserver instamojo

我正在尝试在 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服务器。

1 个答案:

答案 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;,变得非常清楚。