3

我使用了一个普通的类作为 API,并且 U 将所有参数传递给 paypal,我得到了成功。

我唯一缺少的是没有从沙盒帐户中扣除金额。

好像我通过使用checkout with paypal实际金额支付购买产品的金额在我的沙盒帐户中扣除。

可能是什么原因?是否有任何其他替代方式可以让我能够使用贝宝通过付款详细信息表单中传递的参数来收款。

在我这样调用的drupal表单的提交功能中。

$paypalDoDirect = new PaypalDoDirect();

// passing all parameters to $paypalDoDirect

$response= $paypalDoDirect->MakePayment(); 

我得到事务是成功的,并且每个参数都被成功传递。

这是我的类 api-

class PaypalDoDirect
{

    /**Declared all fields **/
    function MakePayment()
    {
        $API_Endpoint = "https://api-3t.paypal.com/nvp";
        if ("sandbox" === $this->environment || "beta-sandbox" === $this->environment) {
            $API_Endpoint = "https://api-3t.$this->environment.paypal.com/nvp";
        }

        // Add request-specific fields to the request string.
        $nvpStr = "&PAYMENTACTION=$this->paymentType&AMT=$this->amount&CREDITCARDTYPE=$this->cc_type&ACCT=$this->cc_number" .
            "&EXPDATE=$this->expdate_month$this->expdate_year&CVV2=$this->cvv2_number&FIRSTNAME=$this->first_name&LASTNAME=$this->last_name&EMAIL=$this->email" .
            "&STREET=$this->address1&CITY=$this->city&STATE=$this->state&ZIP=$this->zip&COUNTRYCODE=$this->country&CURRENCYCODE=$this->currencyID";

        //$httpParsedResponseAr = PPHttpPost('DoDirectPayment', $nvpStr);

        $methodName_ = 'DoDirectPayment';
        $nvpStr_ = $nvpStr;

        // Set the curl parameters.
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        // Turn off the server and peer verification (TrustManager Concept).
        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);
        // Set the API operation, version, and API signature in the request.
        $nvpreq = "METHOD=$methodName_&VERSION=$this->version&PWD=$this->API_Password&USER=$this->API_UserName&SIGNATURE=$this->API_Signature$nvpStr_";
        // Set the request as a POST FIELD for curl.
        curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
        // Get response from the server.
        $httpResponse = curl_exec($ch);
        if (!$httpResponse) {
            return ("$methodName_ failed: " . curl_error($ch) . '(' . curl_errno($ch) . ')');
        }
        // Extract the response details.
        $httpResponseAr = explode("&", $httpResponse);
        $httpParsedResponseAr = array();
        foreach ($httpResponseAr as $i => $value) {
            $tmpAr = explode("=", $value);
            if (sizeof($tmpAr) > 1) {
                $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
            }
        }
        if ((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
            exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
        }
        if ("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])) {
            return "success";
        } else {
            return (urldecode($httpParsedResponseAr["L_LONGMESSAGE0"]));
        }
    }
}
4

2 回答 2

1

是的,drupal 中有一个paypal API模块。这是一个很好的结构化模块,可以在一些自定义模块中扩展 paypal IPN。

如果您使用此模块,IPN 回调将由此模块处理,您可以hook_paypal_api_ipn()在您的实例中收到它的通知。如果您阅读有关使用贝宝处理付款的贝宝文档并查看模块代码,您将了解使用它的机制。我会推荐你​​使用这个模块。

虽然您可以创建自己的模块来处理贝宝付款,无论是快递还是转发用户。我很久以前用drupal实例做过一次。您必须在给定的 URL 为您的帐户发送用户或数据(用于快递),其中包含一些信息以及那里发生的事情(通过/失败/终止),贝宝将通过您提到的实例的回调 URL 通知您。接收信息并做相应的工作..

于 2013-08-16T16:28:52.613 回答
0

这可能就是你要找的,

Paypal 直接付款不起作用

摘 要: DoDirectPayment 调用直接向信用卡收费;它不会从 PayPal 帐户中扣除 - 即使该卡已附加到现有的 PayPal 帐户。因此,它不会在我们的“买家”PayPal 账户中显示为交易。

于 2013-08-29T04:45:57.953 回答