CyberSource / CyberSource/cybersource-rest-samples-python

PostCustomerRequest not honoring buyer_information.merchant_customer_id

Open
#83 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
29
Forks
34
PR merge metrics
No merged PRs in 30d

Description

When I submit a PostCustomerRequest through CustomerApi the return_data shows the merchant_customer_id as None instead of the value I assigned to it.

Here's the code I'm using to test it:

# ENV_NAME=production python3 console/create_customer.py

import json
import os
import sys
from pathlib import Path

from CyberSource import (
    CustomerApi,
    PostCustomerRequest,
    Tmsv2customersBuyerInformation,
    Tmsv2customersClientReferenceInformation,
    Tmsv2customersMerchantDefinedInformation,
)

from config.cybersource_configuration import (
    CybersourceConfiguration,
)

# Environment (sandbox or production)
ENV_NAME = os.environ.get("ENV_NAME", "sandbox")
dir_path = os.path.dirname(os.path.realpath(__file__))


def del_none(d):
    """
    Delete None values in Input Request Json body
    """
    for key, value in list(d.items()):
        if value is None:
            del d[key]
        elif isinstance(value, dict):
            del_none(value)
    return d


def write_log_audit(status):
    print(f"[Sample Code Testing] [{Path(__file__).stem}] {status}")


buyer_information_merchant_customer_id = "user-1234567890"
buyer_information_email = "user@example.com"
buyer_information = Tmsv2customersBuyerInformation(
    merchant_customer_id=buyer_information_merchant_customer_id,
    email=buyer_information_email,
)

clientReferenceInformationCode = "TC50171_3"
clientReferenceInformation = Tmsv2customersClientReferenceInformation(
    code=clientReferenceInformationCode
)

requestObj = PostCustomerRequest(
    buyer_information=buyer_information.__dict__,
    client_reference_information=clientReferenceInformation.__dict__,
)


requestObj = del_none(requestObj.__dict__)
requestObj = json.dumps(requestObj)

print(requestObj)

try:
    configuration = CybersourceConfiguration()
    client_config = configuration.get_configuration()
    api_instance = CustomerApi(client_config)
    return_data, status, body = api_instance.post_customer(requestObj)

    print("\nAPI RESPONSE CODE : ", status)
    print("\nAPI RESPONSE BODY : ", body)
    print("\nAPI RESPONSE DATA : ", return_data)

    write_log_audit(status)

except Exception as e:
    write_log_audit(str(e))
    print(f"\nException when calling CustomerApi->post_customer: {e}\n")

And here's the response I get back:

❯ python -m console.create_customer

API RESPONSE CODE :  201

API RESPONSE BODY :  {"_links":{"self":{"href":"/tms/v2/customers/41ADA55F0277F548E063AF598E0AFAD3"},"paymentInstruments":{"href":"/tms/v2/customers/41ADA55F0277F548E063AF598E0AFAD3/payment-instruments"},"shippingAddresses":{"href":"/tms/v2/customers/41ADA55F0277F548E063AF598E0AFAD3/shipping-addresses"}},"id":"41ADA55F0277F548E063AF598E0AFAD3","buyerInformation":{"email":"user@example.com"},"clientReferenceInformation":{"code":"TC50171_3"},"metadata":{"creator":"creator_id_here"}}

API RESPONSE DATA :  {'buyer_information': {'email': 'user@example.com',
                       'merchant_customer_id': None},
 'client_reference_information': {'code': 'TC50171_3'},
 'default_payment_instrument': None,
 'default_shipping_address': None,
 'embedded': None,
 'id': '41ADA55F0277F548E063AF598E0AFAD3',
 'links': {'_self': {'href': '/tms/v2/customers/41ADA55F0277F548E063AF598E0AFAD3'},
           'payment_instruments': {'href': '/tms/v2/customers/41ADA55F0277F548E063AF598E0AFAD3/payment-instruments'},
           'shipping_address': None},
 'merchant_defined_information': None,
 'metadata': {'creator': 'creator_id_here'},
 'object_information': None}
[Sample Code Testing] [create_customer] 201

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with console/create_customer.py and reproduce the PostCustomerRequest through CustomerApi using the example values. Compare the serialized request and returned buyer_information; done means merchant_customer_id is sent and preserved in the API response.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.