Copy link to clipboard
Copied
I am trying to create reports in Stripe but their examples are PHP. I've had success with all their other functions I'm just stuck on reports. The PHP example is:
POST
/v1/reporting/report_runs
// Note that a live-mode API key is required.
\Stripe\Reporting\ReportRun::create([
'report_type' => 'balance_change_from_activity.itemized.3',
'parameters' => [
'interval_start' => '1577865600',
'interval_end' => '1580544000',
'timezone' => 'America/Los_Angeles',
],
]);
My code looks like:
<!--- Data related to call --->
<cfset stripe_api_key = 'sk_live_XXXXXX' />
<cfset stripe_api_url = 'https://api.stripe.com/v1/' />
<cfset report_type = 'payout_reconciliation.summary.1' />
<cfset Interval_Start = #DateDiff("s", DateConvert("utc2Local", "January 1 1970 00:00"), Start)# />
<cfset Interval_End = #DateDiff("s", DateConvert("utc2Local", "January 1 1970 00:00"), End)# />
<cfset timezone = 'America/New_York' />
<!--- Call --->
<cffunction name="createReport" access="private">
<cfargument name="interval_start" type="numeric" required="true">
<cfargument name="interval_end" type="numeric" required="true">
<cfargument name="timezone" type="string" required="true" default="">
<cfargument name="report_type" type="string" required="true" default="">
<cfhttp url="#stripe_api_url#reporting/report_runs" method="POST" username="#stripe_api_key#" password="" charset="utf-8" result="report_result">
<cfhttpparam type="formfield" name="Report_Type" value="#arguments.report_type#" >
<cfhttpparam type="formfield" name="parameters[interval_start]" value="#arguments.interval_start#" >
<cfhttpparam type="formfield" name="parameters[interval_end]" value="#arguments.interval_end#" >
<cfhttpparam type="formfield" name="parameters[timezone]" value="#arguments.timezone#" >
</cfhttp>
<cfif NOT isDefined("report_result.statusCode")>
<cfthrow type='Stripe' errorcode="stripe_unresponsive" message="The Stripe server did not respond." detail="The Stripe server did not respond." />
<cfelseif left(report_result.statusCode,3) NEQ "200">
<cfreturn deserializeJSON(report_result.filecontent) />
</cfif>
<cfreturn deserializeJSON(report_result.filecontent) />
</cffunction>
The request post body on Stripe:
{
"Report_Type": "payout_reconciliation.summary.1",
"parameters": {
"interval_start": "1589256000",
"interval_end": "1589342400",
"timezone": "America/New_York"
}
}
It returns:
{
"error": {
"code": "parameter_unknown",
"doc_url": "https://stripe.com/docs/error-codes/parameter-unknown",
"message": "Received unknown parameter: Report_Type",
"param": "Report_Type",
"type": "invalid_request_error"
}
}
I am guessing it's got to do with this part of the PHP which I don't understand:
I appreciate any help.....
1 Correct answer
Answered my own question... Report_Type needs to be report_type. After posting this it hit me if it wants the time in epoch time then it's likely Linux and case sensitive.
Copy link to clipboard
Copied
Answered my own question... Report_Type needs to be report_type. After posting this it hit me if it wants the time in epoch time then it's likely Linux and case sensitive.
Copy link to clipboard
Copied
Hi, I see you have successfully set up a PHP payment server with Coldfusion. I would like to do the same for my application. Do you have any files or a repo that I could use as examples?
Thank you in advance for your help.
Regards,
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Thank you for your answer. Have you tried using version 3 of the Stripe API which gives more functionality?
Copy link to clipboard
Copied
It's good news that it's working, of course. But may I share an idea, based on the information you give above.
What about simplifying the HTTP-POST call to:
<cffunction name="createReport" access="private">
<cfargument name="interval_start" type="numeric" required="true">
<cfargument name="interval_end" type="numeric" required="true">
<cfargument name="timezone" type="string" required="true" default="">
<cfargument name="report_type" type="string" required="true" default="">
<cfset var params = '{ "interval_start": "#arguments.interval_start#",
"interval_end": "arguments.interval_end",
"timezone": "#arguments.timezone#"
}'>
<cfhttp url="#stripe_api_url#reporting/report_runs" method="POST" username="#stripe_api_key#" password="" charset="utf-8" result="report_result">
<cfhttpparam type="formfield" name="Report_Type" value="#arguments.report_type#" encoded="false">
<cfhttpparam type="formfield" name="parameters" value="#params#" encoded="false" >
</cfhttp>
</cffunction>
Copy link to clipboard
Copied
Merci à tous !

