Skip to main content

Delete customer credit card

Delete customer credit card

Last updated: 31-Dec-2020
Rate this article:


Use the removeCCFromCustomer method via JSON-RPC API 6.0 to delete/unlink a customer's credit card information from the myAccount platform.

Request parameters

Parameter Type Required/Optional Description
CustomerReference String Required Internal 2Checkout customer reference or your customer identifier.
TransientToken String Required Transient Token for the card can be found in getCustomerInfoBySSOToken.


# all good and was deleted
    "Deleted": true
# no and the delete failed with reasons
    "Deleted": false,
    "Subscriptions" [
            "SubscriptionReference": "ABCF122132",
            "Error": {
                "error_code": "MY_ERROR_CODE_1",
                "message": ".... credit card was not deleted due to ..."
            "SubscriptionReference": "DKHGTR12312",
            "Error": {
                "error_code": "MY_ERROR_CODE_2",
                "message": ".... credit card was not deleted due to ..."
            "SubscriptionReference": "KHSTT1213",
            "Error": {
                "error_code": "MY_ERROR_CODE_3",
                "message": ".... credit card was not deleted due to ..."

Request sample


class Configuration
    public const MERCHANT_CODE = '';
    public const MERCHANT_KEY = '';
    public const URL = '';
    public const ACTION = 'unlinkCustomerCreditCard';
    public const ADDITIONAL_OPTIONS = null;
    //array or JSON
    public const PAYLOAD =
        "CustomerReference" : "someref",
        "TransientToken" : "sometoken"


class Client
    private const LOGIN_METHOD = 'login';
    private $calls = 1;
    private $sessionId;

    public function execute()
        $this->call(Configuration::URL, $this->generateRequestPayload(), Configuration::ACTION);

    private function login(string $url)
        $payload = $this->generateAuthPayload();
        $response = $this->call($url, array_values($payload), self::LOGIN_METHOD);
        $this->sessionId = $response['result'];

    private function generateAuthPayload(): array
        $merchantCode = Configuration::MERCHANT_CODE;
        $key = Configuration::MERCHANT_KEY;
        $date = gmdate('Y-m-d H:i:s');
        $string = strlen($merchantCode).$merchantCode.strlen($date).$date;
        $hash = hash_hmac('md5', $string, $key);

        return compact('merchantCode', 'date', 'hash');

    private function call(
        string $url = Configuration::URL,
        $payload = Configuration::PAYLOAD,
        string $action = Configuration::ACTION
    ): ?array {
        $request = json_encode([
            'jsonrpc' => '2.0',
            'method' => $action,
            'params' => $payload,
            'id' => $this->calls++,
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($curl, CURLOPT_SSLVERSION, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER,
            array('Content-Type: application/json', 'Accept: application/json', 'Cookie: XDEBUG_SESSION=PHPSTORM'));
        curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
        $response = curl_exec($curl);
        if (empty($response)) {
            die('Server unavailable');
        echo $response.'</br>';

        return json_decode($response, true);;

    private function generateRequestPayload(): array
        if (empty($this->sessionId)) {
            throw new LogicException('Login should be called first');

        $requestPayload = (is_string(Configuration::PAYLOAD))
            ? json_decode(Configuration::PAYLOAD,
            true) : Configuration::PAYLOAD;

        $payload = array_merge(
        $payload[] = $requestPayload;

        return $payload;

$client = new Client();
$result = $client->execute();
Rate this article:

Need help?

Do you have a question? If you didn’t find the answer you are looking for in our documentation, you can contact our Support teams for more information. If you have a technical issue or question, please contact us. We are happy to help.

Not yet a Verifone customer?

We’ll help you choose the right payment solution for your business, wherever you want to sell, in-person or online. Our team of experts will happily discuss your needs.

Verifone logo