Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Problems in passing id values to Stripe API objects using cfhttp

Explorer ,
Jun 18, 2022 Jun 18, 2022

I am able to pass field values to Stripe's Customer object using the code

 

<cfhttp method = "POST" url="https://api.stripe.com/v1/customers">

<cfhttpparam type="header" name="Authorization" value="Bearer sk_test_.....">

<cfhttpparam type="FormField" name="id" value = "cust_admin_18">

<cfhttpparam type="FormField" name="address[country]" value = "US"> ........ </cfhttp>

 

However when I try similar code with other Stripe objects, for example Payment_Method, I get an error with the id field. So

<cfhttp method = "POST" url="https://api.stripe.com/v1/payment_methods">

<cfhttpparam type="header" name="Authorization" value="Bearer sk_test_.....">

<cfhttpparam type="FormField" name="id" value = "pm_123">

<cfhttpparam type="FormField" name="type" value = "card">

<cfhttpparam type="FormField" name="card[number]" value = "4242424242424242"> 

</cfhttp>

produces an error parameter_unknown - id

 

Changing "FormField" to "header" stops the error, but then the id value is not passed.

 

Thanks in advance for comments.

 

TOPICS
Advanced techniques
420
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Jun 19, 2022 Jun 19, 2022

In REST APIs a POST request is the usual way to create a resource. After the server creates the resource, it sends the ID of the created resource to the client.

 

Your code suggests that you wish to create a payment method. If so, then the ID is as yet unknown at this point. The server first has to create the payment method, assign it an ID, then return the ID to you.  

 

So your code should be something like

 

<!--- See documentation https://stripe.com/docs/api/payment_methods/create --->
<cfht
...
Translate
Community Expert ,
Jun 18, 2022 Jun 18, 2022

[Moderator moved from Using the Community (forums) to ColdFusion.]

Nancy O'Shea— Product User, Community Expert & Moderator
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 18, 2022 Jun 18, 2022

Help us out: which specific kind of call to that object are you making, that accepts an ID. Not all do, according to the options for that object shown at https://stripe.com/docs/api/payment_methods


/Charlie (troubleshooter, carehart. org)
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 19, 2022 Jun 19, 2022

In REST APIs a POST request is the usual way to create a resource. After the server creates the resource, it sends the ID of the created resource to the client.

 

Your code suggests that you wish to create a payment method. If so, then the ID is as yet unknown at this point. The server first has to create the payment method, assign it an ID, then return the ID to you.  

 

So your code should be something like

 

<!--- See documentation https://stripe.com/docs/api/payment_methods/create --->
<cfhttp method = "POST" url="https://api.stripe.com/v1/payment_methods">
    <cfhttpparam type="header" name="Authorization" value="Bearer sk_test_.....">
    <cfhttpparam type="FormField" name="type" value = "card">
    <cfhttpparam type="FormField" name="card[number]" value = "4242424242424242"> 
    <cfhttpparam type="FormField" name="card[exp_month]" value = "6">
    <cfhttpparam type="FormField" name="card[exp_year]" value = "2023"> 
    <cfhttpparam type="FormField" name="card[cvc]" value = "314"> 
</cfhttp>

 

The API's response should then contain the payment method's ID. It will be something like pm_1LC1qa2eZvKYlo2Cl9jsP6CS

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jun 19, 2022 Jun 19, 2022

Many thanks. This code does some of what I need. I may come back with more comments.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 20, 2022 Jun 20, 2022

The Stripe API test code

<cfhttp method = "POST" url="https://api.stripe.com/v1/payment_methods">
	<cfhttpparam type="header" name="Authorization" value="Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc">
	<cfhttpparam type="FormField" name="type" value = "card">
	<cfhttpparam type="FormField" name="card[number]" value = "4242424242424242"> 
	<cfhttpparam type="FormField" name="card[exp_month]" value = "6">
	<cfhttpparam type="FormField" name="card[exp_year]" value = "2023"> 
	<cfhttpparam type="FormField" name="card[cvc]" value = "314"> 
</cfhttp>
<cfdump var="#cfhttp.filecontent#" >

 

gives the result:

{
	"id": "pm_1LCfsY2eZvKYlo2CIsSsRyzb",
	"object": "payment_method",
	"billing_details": {
		"address": {
			"city": null,
			"country": null,
			"line1": null,
			"line2": null,
			"postal_code": null,
			"state": null
		},
		"email": null,
		"name": null,
		"phone": null
	},
	"card": {
		"brand": "visa",
		"checks": {
			"address_line1_check": null,
			"address_postal_code_check": null,
			"cvc_check": "unchecked"
		},
		"country": "US",
		"exp_month": 6,
		"exp_year": 2023,
		"fingerprint": "Xt5EWLLDS7FJjR1c",
		"funding": "credit",
		"generated_from": null,
		"last4": "4242",
		"networks": {
			"available": ["visa"],
			"preferred": null
		},
		"three_d_secure_usage": {
			"supported": true
		},
		"wallet": null
	},
	"created": 1655713358,
	"customer": null,
	"livemode": false,
	"metadata": {},
	"type": "card"
}
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jun 20, 2022 Jun 20, 2022

Many thanks, and I got something like this after reading your previous comment.

 

But now I have difficulty in attaching a Payment Method to a Customer. Stripe give documentation for this, but of course it is in curl.

 

Code such as 

 

<cfhttp method = "POST" url="https://api.stripe.com/v1/payment_methods/pm_1LCuutGKxC2502V8WNrkE3Ja" result = "result">

<cfhttpparam type="header" name="Authorization" value="Bearer sk_test_51....">

<cfhttpparam type="FormField" name="customer" value = "cust_admin_1">

 

.......

 

</cfhttp>

 

does not work (the Payment Method id used above was generated when the Payment Method record was added).

 

I am trying to make progress through trial and error, but if anyone has a definitive answer, your comments will be much appreciated.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 21, 2022 Jun 21, 2022
LATEST

I understand. Attac
hing a payment-method to a customer is a separate issue. So I would suggest that you create a new thread for it. If you want you can include in it a link to this thread. Separate threads would make things clearer for each issue.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources