ADYEN付款 - 测试SoapFault对象时出现SOAP错误([message:protected] => security 010不允许

This is my first post in this forum. I'm trying to develop all the payments to Adyen using the WS, instead of the skin/post method that I was using until now. So, I downloaded from their example, this code (I'm posting also the class method to connect by WS)

function Adyen($login, $password, $host ="live", $debug=FALSE ) {
    $this->DEBUG = $debug;

    $this->client = new SoapClient( "https://pal-$host.adyen.com/pal/Payment.wsdl",
      array(
        "login" => $login,
        "password" => $password,
        'trace' => 1,
        'soap_version' => SOAP_1_1,
        'style' => SOAP_DOCUMENT,
        'encoding' => SOAP_LITERAL
      )
    );
}


function authorise( $amount,$currencyCode,$cardHolder,$cardNumber,$expm,$expy,$cvc,$reference) {
        global $merchantAccount;

    $response = $this->client->authorise( array(
      "paymentRequest" => array 
      (
        "amount" => array (
        "value" => $amount,
        "currency" => $currencyCode),
        "card" => array (
        "cvc" => $cvc,
        "expiryMonth" => $expm,
        "expiryYear" => $expy,
        "holderName" => $cardHolder,
        "number" => $cardNumber,
        ),
      "merchantAccount" => $merchantAccount,
      "reference" => $reference,
    )
      )
    );

When I'm executing this code, it returns this error

#!/usr/bin/php SOAP Error on test SoapFault Object ( [message:protected] => security 010 Not allowed [string:Exception:private] => 

Do you have any suggestions to solve it?

Best Regards.

Edit: It's too strange, cause with the same method, but with different parameters (In case of the recurring payment, I haven't this error. This the case runs

$response = $this->client->authorise(
                array(
                    "paymentRequest" =>
                    array(
                        "amount" => array("value" => $amount, 
                                          "currency" => $currencyCode),
                        "merchantAccount" => $merchantAccount,
                        "reference" => $reference,
                        "shopperReference" => $reference",
                        "shopperEmail" => $email,
                        "recurring" => array("contract" => "RECURRING"),
                        "selectedRecurringDetailReference" => "LATEST",
                        "shopperInteraction" => "ContAuth"
                    )
                )
        );

From Adyen documentation

010 Not allowed You are not allowed to perform this action

I think you should send email to their support. May be your account not ready for use.

Had the same question, here is the support answer:

You are trying to make an API payment. Please be aware that there are a few downsides using the direct integration API.

Most important, due to strict industry regulations, the Merchant is required to be PCI DSS (Payment Card Industry Data Security Standard) compliant at Level 1 or 2. The PCI DSS certification process requires a big contribution from you in both time and money.

http://en.wikipedia.org/wiki/PCI_DSS

The direct integration also offers a limited set of payment methods and might require you to implement features like the 3D secure mechanism.

The normal integration works as follow:

  1. Redirect the shopper from your website to our Hosted Payment Pages.
  2. Shopper can choose several payment methods and makes the payment.
  3. Shopper is redirected back to your website and we pass back a result code of the payment.
  4. We sent also a notification via SOAP or HTTP Post.

I think in this code you have mistakenly put extra double quotes( "shopperReference" => $reference",).

$response = $this->client->authorise(
                array(
                    "paymentRequest" =>
                    array(
                        "amount" => array("value" => $amount, 
                                          "currency" => $currencyCode),
                        "merchantAccount" => $merchantAccount,
                        "reference" => $reference,
                        "shopperReference" => $reference",
                        "shopperEmail" => $email,
                        "recurring" => array("contract" => "RECURRING"),
                        "selectedRecurringDetailReference" => "LATEST",
                        "shopperInteraction" => "ContAuth"
                    )
                )
        );

You need to add your ip in the ca admin area for the user 'Edit Allowed User IP Range'.