ajax发布并获取Coldfusion文件设置值后获取失败

问题描述

我正在尝试在我的网站上编写一个带区检出组件。这使用了“按需支付”选项,因此我需要一种通过ajax发送总价值数据的方法

const url = '/shop/api/test.cfm';
const sendCheckoutData = () => {
    const data = {};
    data.total = $('.total').val() * 100;
    console.log(data);
    if(!isNaN(data.total)) {
        $.ajax({
            url,type: 'POST',data: JSON.stringify(data),contentType: 'application/json',success(data) {
                console.log('checkoutData sent');
                returnCheckoutData();
            },error(status) {
                console.log('checkoutData not sent',status.statusText);
            }
        });
    }
}
const returnCheckoutData = () => {
    $.ajax({
        url,type: 'GET',success(data) {
            console.log('checkoutData returned');
        },error(status) {
            console.log('checkoutData not returned',status.statusText);
        }
    });
}

在我的cfm文件中,我有以下内容

<cfset requestBody = toString( getHttpRequestData().content ) />
<!--- Double-check to make sure it's a JSON value. --->
<cfif isJSON( requestBody )>
    <cfset VARIABLES.checkoutData = deserializeJSON( requestBody )>
</cfif>

<cfscript>
    secretKey = "MY_SECRET_KEY";
    crlf = chr(13)&chr(10);
    headers = "Content-Type: application/x-www-form-urlencoded"&crlf;
    headers &= "Authorization: Bearer "&secretKey&crlf;
    body = "success_url="&URLEncodedFormat("https://slackwise.org.uk/shop/checkout/complete.cfm")
                &"&cancel_url="&URLEncodedFormat("https://slackwise.org.uk/shop/checkout/fail.cfm")
                &"&payment_method_types[]=card"
                &"&line_items[0][amount]=#VARIABLES.checkoutData.total#"
                &"&line_items[0][currency]=gbp"
                &"&line_items[0][quantity]=1"
                &"&line_items[0][name]=widget";
</cfscript>

<cfx_http5 out="http5" method="post" url="https://api.stripe.com/v1/checkout/sessions" headers="#headers#" body="#body#" ssl="5">

<cfdump var="#deserializeJSON(http5)#">

在发布请求中,似乎VARIABLES.checkoutData设置为正确的金额,并且正在传递给正文中的&line_items[0][amount]。 在ajax发布成功后,我想执行一个get请求以返回新值并生成一个带区令牌,但这是失败的。

我得到以下调试信息

Message: Element CHECKOUTDATA.TOTAL is undefined in VARIABLES.

我不确定是否要重置var。

我也尝试过创建cfc,并将我的requestBody函数以及整个函数包装在组件中(通过cfx_http5调用)。

我不确定100%的contentType对于get请求是否正确,cfm文件认contentType是什么?我尝试删除它,并将其设置为multipart / form-data,但是可能我的方法不正确。

非常感谢任何帮助。

编辑

发布请求cfdump

struct
allow_promotion_codes   null
amount_subtotal 2400
amount_total    2400
billing_address_collection  null
cancel_url  https://slackwise.org.uk/shop/checkout/fail.cfm
client_reference_id null
currency    gbp
customer    null
customer_email  null
display_items   
array
1   
struct
amount  2400
currency    gbp
custom  
struct
description null
images  null
name    widget
quantity    1
type    custom
id  cs_test_removed
livemode    NO
locale  null
Metadata    
struct [empty]
mode    payment
object  checkout.session
payment_intent  pi_1HSjSJIMlFPwHnRlo3DnfC0N
payment_method_types    
array
1   card
payment_status  unpaid
setup_intent    null
shipping    null
shipping_address_collection null
submit_type null
subscription    null
success_url https://slackwise.org.uk/shop/checkout/complete.cfm
total_details   
struct
amount_discount 0
amount_tax  0

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)