首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Amazon,java,V2 in coldfusion cfc -方法未找到

问Amazon,java,V2 in coldfusion cfc -方法未找到
EN

Stack Overflow用户
提问于 2022-07-07 04:27:48
回答 1查看 90关注 0票数 2

我正在尝试实现Amazon,即coldfusion中的V2 ( am 2016/windows),它利用了亚马逊文档和.jar文件提供的JAVA代码。(https://github.com/amzn/amazon-pay-api-sdk-java#readme)

我写了一个cfc,打算在会议中使用。我实例化WebstoreClient对象,设置Pay配置并生成按钮代码。单击页面上的按钮,打开一个窗口,登录沙箱,关闭窗口并转到URL中带有会话it的第二个签出页(保持简单),当单击按钮时,amazon创建签出会话,所有本地方法都是到amazon服务器的GET/POST/补丁操作--够简单了。不懂java,但通常能够遵循代码,看起来一切都在那里。

这里是我遇到麻烦的地方。我不能getCheckoutSession(会话is )我得到的错误是

未找到getCheckoutSession方法。要么没有具有指定方法名称和参数类型的方法,要么getCheckoutSession方法重载了ColdFusion无法可靠解密的参数类型。ColdFusion找到了与提供的参数匹配的0种方法。如果这是一个Java对象,并且您验证了该方法的存在,那么使用javacast函数来减少歧义。

我的第一个结账页面是这样的,很好。

代码语言:javascript
复制
<cfset session.amazonPayClient=createObject('component', 'cfc.amazon').init(dsn='xyz',env='dev')>
<cfoutput>#session.amazonPayClient.renderButton()#</cfoutput>

第二个页面有以下内容,这就是我获得错误-方法未找到的地方。

代码语言:javascript
复制
<cfset session.amazonPayClient.getCheckoutSess(url.amazonCheckoutSessionId)>

这就是我创建对象的方式--它发生在cfc的init()中。

代码语言:javascript
复制
<cffunction name="setClient" access="private" returntype="void" hint="this creates the client used to initialize the checkout" output="no">
        <cfset region=createObject("java", "com.amazon.pay.api.types.Region")>
        
        <cffile action="read" file="#variables.PEM_PATH#" variable="pem">
        <cfset variables.oPayConfiguration = createObject("java", "com.amazon.pay.api.PayConfiguration")
            .setPublicKeyId("#variables.amazonProperties.publicKeyID#")
            .setPrivateKey("#pem#")
            .setRegion(Region.NA)
            .setEnvironment(variables.Environment.SANDBOX)
        >
        
        <cfset variables.oClient=createObject("java", "com.amazon.pay.api.WebstoreClient").init(variables.oPayConfiguration)>
</cffunction>

这2与按钮签名一起工作--我认为它在其他地方使用(最终)

代码语言:javascript
复制
<cffunction name="genButtonSignature" access="private" returntype="string" hint="this generates the button signature used to create the checkoutsession" output="no">
    <cfset signature = variables.oClient.generateButtonSignature(variables.amazonProperties.buttonPayload)>
    <cfreturn trim(signature)>
</cffunction>

<cffunction name="getButtonSignature" access="private" returntype="string" output="no">
    <cfreturn trim(variables.amazonProperties.buttonSignature)>
</cffunction>

这个按钮显示得很好。

代码语言:javascript
复制
<cffunction name="renderButton" access="public" returntype="string" output="no">
    <cfset var buttonCode="">
    <cfsavecontent variable="buttonCode">
        <div id="AmazonPayButton"></div>
        <script src="<cfoutput>#variables.amazonProperties.payScript#</cfoutput>"></script>
        <script type="text/javascript" charset="utf-8">
              amazon.Pay.renderButton('#AmazonPayButton', {
                   // set checkout environment
                   merchantId: '<cfoutput>#variables.amazonProperties.merchantID#</cfoutput>',
                   publicKeyId: '<cfoutput>#variables.amazonProperties.publicKeyID#</cfoutput>',
                      ledgerCurrency: 'USD',         
                      // customize the buyer experience
                      checkoutLanguage: 'en_US',
                      productType: 'PayAndShip',
                      placement: 'Cart',
                      buttonColor: 'Gold',
                      createCheckoutSessionConfig: {                     
                          <cfoutput>payloadJSON:'#variables.amazonProperties.buttonPayload#',
                          signature:'#getButtonSignature()#'</cfoutput>
                      }   
                  });
             </script>
        </cfsavecontent>
        <cfreturn buttonCode>
    </cffunction>

而这正是它失败的地方。当使用亚马逊ScratchPad时,它所需要的只是checkoutSessionId,所以我在这一点上完全迷失了方向。

代码语言:javascript
复制
<cffunction name="getCheckoutSess" access="public" returntype="any">
    <cfargument name="sessionID" type="string" required="true">
    <cfreturn variables.oClient.getCheckoutSession(checkoutSessionId=arguments.sessionID)>
</cffunction>

该方法在WebStoreClient中存在

代码语言:javascript
复制
/**
     * The GetCheckoutSession operation is used to get checkout session details that contain
     * all session associated details.
     *
     * @param checkoutSessionId Checkout Session ID provided by Checkout v2 service
     * @param header Map&lt;String, String&gt; containining key-value pair of required headers (e.g., keys such as x-amz-pay-idempotency-key, x-amz-pay-authtoken)
     * @return The response from the GetCheckoutSession service API, as
     * returned by Amazon Pay.
     * @throws AmazonPayClientException When an error response is returned by Amazon Pay due to bad request or other issue
     */
    public AmazonPayResponse getCheckoutSession(final String checkoutSessionId, final Map<String, String> header) throws AmazonPayClientException {
        final URI checkoutSessionURI = Util.getServiceURI(payConfiguration, ServiceConstants.CHECKOUT_SESSIONS);
        final URI getCheckoutSessionURI = checkoutSessionURI.resolve(checkoutSessionURI.getPath() + "/" + checkoutSessionId);
        return callAPI(getCheckoutSessionURI, "GET", null, "", header);
    }

    /**
     * The GetCheckoutSession operation is used to get checkout session details that contain
     * all session associated details.
     *
     * @param checkoutSessionId Checkout Session ID provided by Checkout v2 service
     * @return The response from the GetCheckoutSession service API, as
     * returned by Amazon Pay.
     * @throws AmazonPayClientException When an error response is returned by Amazon Pay due to bad request or other issue
     */
    public AmazonPayResponse getCheckoutSession(final String checkoutSessionId) throws AmazonPayClientException {
        return getCheckoutSession(checkoutSessionId, null);
    }

我真的希望在读完这些之后,有人能说,哦,这很简单,你不懂一些基本的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-07 14:05:52

您使用的是什么版本的ColdFusion?你在使用javacast吗?如果函数/方法需要INT或其他特定的数据类型,则需要确保显式转换或java将抛出相同的错误,因为数据类型不匹配。(注意:有些数据类型可能是非标准的CFML类型。我已经开始转换查询返回的值,因为有时CFML-字符串不是java-字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72892289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档