【问题标题】:Test third party shopping cart (Paypal)测试第三方购物车(Paypal)
【发布时间】:2016-01-08 08:01:39
【问题描述】:

我正在尝试测试第三方购物车 api,结果总是得到空字符串。

这是我要测试的代码:

$ch = curl_init();
    $params = array();
    $params["cmd"]= "_cart";
    $url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
    $params["upload"] = 1;
    $params["business"] = "my business email";
    $params["item_name_1"] = "Item Name 1";
    $params["amount_1"]  = "1.00";
    $params["shipping_1"] = "1.75";
    $params["item_name_2"] = "Item Name 2";
    $params["amount_2"] = "2.00";
    $params["shipping_2"] ="2.50";
    $params["currency_code"] = "USD";
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($params));
    $response = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);

我收到$response = "";

我有一些问题:

  1. 知道我做错了什么吗?
  2. 我应该得到什么响应?
  3. 在这种情况下我应该做令牌api(https://api.sandbox.paypal.com/v1/oauth2/token)来获取密钥吗?

【问题讨论】:

    标签: php curl paypal paypal-sandbox


    【解决方案1】:

    首先,您必须使用 http_build_query 方法而不是以数组的形式发布到 paypal 服务器,而是像查询一样发布 - 以我的示例为例:

    $padata['L_BILLINGAGREEMENTDESCRIPTION0']   = 'product description';
    $padata['L_PAYMENTREQUEST_0_DESC0']         = $padata['L_BILLINGAGREEMENTDESCRIPTION0'] . ' price - 0,01$';
    $padata['PAYMENTREQUEST_0_NOTIFYURL']       = 'http://yourdomain.com/paypal/ipn';
    $padata['PAYMENTREQUEST_0_DESC']            = 'product name'; //enter code here
    $padata['CANCELURL']                        = ''http://yourdomain.com/paypal/cancelurl';
    $padata['RETURNURL']                        = ''http://yourdomain.com/paypal/returnurl';
    $padata['PAYMENTREQUEST_0_CURRENCYCODE']    = 'USD';
    $padata['PAYMENTREQUEST_0_PAYMENTACTION']   = 'SALE';
    $padata['PAYMENTREQUEST_0_ITEMAMT']         = $product->price;
    $padata['PAYMENTREQUEST_0_AMT']             = $product->price;
    $padata['L_BILLINGTYPE0']                   = 'RecurringPayments';
    $padata['L_PAYMENTREQUEST_0_NAME0']         = 'product name';
    $padata['L_PAYMENTREQUEST_0_NUMBER0']       = 223; // 'product ID '
    $padata['L_PAYMENTREQUEST_0_QTY0']          = '1';
    $padata['L_PAYMENTREQUEST_0_AMT0']          = $product->price;
    
    $paypal_data            = http_build_query($padata);
    $httpParsedResponseAr   = $this->PPHttpPost('SetExpressCheckout', $paypal_data);
    

    我使用单独的方法将数据发送到 paypal api:

    私有函数 PPHttpPost( $methodName_, $nvpStr_ ) {
    
        $api_username = 'yourapiemail@paypal.com';
        $api_password = '111111';
        $api_signature = 'ASDdsasdaASDasdaDASDFzMjEzStQBLyke6Pi4vQhAy3JWRsdOpQybmHjpzasdsad.fT';
        $api_endpoint = "https://api-3t.paypal.com/nvp";
        $版本 = '124.0';
    
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $api_endpoint);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
    
        $nvpreq = "方法=$methodName_&VERSION=$version&PWD=$api_password&USER=$api_username&SIGNATURE=$api_signature&$nvpStr_";
    
        curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
        $httpResponse = curl_exec($ch);
    
        如果(!$http响应){
            exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
        }
    
        // 提取响应详细信息。
        $httpResponseAr = explode("&", $httpResponse);
    
        $httpParsedResponseAr = 数组();
        foreach ($httpResponseAr as $i => $value) {
            $tmpAr = explode("=", $value);
            如果(大小($tmpAr)> 1){
                $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
            }
        }
    
        if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
            exit("对 $api_endpoint 的 POST 请求 ($nvpreq) 的 HTTP 响应无效。");
        }
    
        返回 $httpParsedResponseAr;
    }

    【讨论】:

    • 感谢您的帮助。我会查一下。另一个问题:我应该添加哪个按钮才能使其工作。有购物车,现在购买吗?
    猜你喜欢
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2013-09-29
    • 2015-07-17
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多