私はアイテム検索でアマゾンを呼び出し、アイテムのリストを返すようにしようとしています。したいことは、特定の売り手のアイテムを返すことです。タイムスタンプの基礎としてColdFusion Amazonアイテムの検索
<cfscript>
test = ItemLookup(ItemId="B00R6T0PLM",AWSAccessKeyId=request.awsaccesskeyid,AssociateTag=request.AssociateTag,secretkey=request.secretkey);
</cfscript>
<cffunction name="ItemLookup" hint="AZ lookup by PID">
<cfargument name="ItemId">
<cfargument name="AWSAccessKeyId" required="false" default="XXXXXXXXXXXXX">
<cfargument name="AssociateTag" required="false" default="zzzzz-">
<cfargument name="secretkey" required="false" default="YYYYYYYYYYYYYYYYYYY">
<cfargument name="ResponseGroup" required="false" default="Medium">
<cfset ts = '#DateFormat(now(), "YYYY-MM-DD")#T'>
<cfset tt = '#TimeFormat(now(), "HH:mm:ss")#Z'>
<cfset encts = '#ts#' & urlencodedFormat('#tt#')>
<cfset p = arraynew(1)>
<cfset p[4] = 'Service=AWSECommerceService'>
<cfset p[8] = 'AWSAccessKeyId=#arguments.AWSAccessKeyId#'>
<cfset p[3] = 'Operation=ItemLookup'>
<cfset p[2] = 'ItemId=#arguments.ItemId#'>
<cfset p[5] = 'Timestamp=#encts#'>
<cfset p[6] = 'AssociateTag=#arguments.AssociateTag#'>
<cfset p[7] = 'Version=2011-08-01'>
<cfset p[1] = 'ResponseGroup=#arguments.ResponseGroup#'>
<cfset ArraySort(p,"text","asc")>
<cfset req_params = '#p[1]#&#p[2]#&#p[3]#&#p[4]#&#p[5]#&#p[6]#&#p[7]#&#p[8]#'>
<cfset lineBreak = Chr(10)>
<cfset tosign = 'GET#lineBreak#webservices.amazon.in#lineBreak#/onca/xml#lineBreak##req_params#'>
<cfset signed = URLEncodedFormat(ToBase64(HMAC_SHA256(tosign,"#arguments.secretkey#")))>
<cfset req = 'http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&Operation=ItemSearch&AWSAccessKeyId=arguments.AWSAccessKeyId&AssociateTag=arguments.AssociateTag&SearchIndex=Apparel&Keywords=Shirt&Timestamp=#ts##tt#&Signature=#signed#'>
<cfhttp url='#req#' method="get" result="res"/>
<cfreturn res.filecontent>
<cfreturn tosign>
</cffunction>
<cffunction name="HMAC_SHA256" returntype="binary" access="public" output="no" hint="Sign for AZ request">
<cfargument name="signMessage" type="string" required="true" />
<cfargument name="signKey" type="string" required="true" />
<cfset local.jMsg = JavaCast("string",arguments.signMessage).getBytes("iso-8859-1") />
<cfset local.jKey = JavaCast("string",arguments.signKey).getBytes("iso-8859-1") />
<cfset local.key = createObject("java","javax.crypto.spec.SecretKeySpec") />
<cfset local.mac = createObject("java","javax.crypto.Mac") />
<cfset local.key = local.key.init(local.jKey,"HmacSHA256") />
<cfset local.mac = local.mac.getInstance(local.key.getAlgorithm()) />
<cfset local.mac.init(local.key) />
<cfset local.mac.update(local.jMsg) />
<cfreturn local.mac.doFinal() />
</cffunction>
<cfdump var="#test#">
私は)私は(今の使用を考えて帰ってきた...
<?xml version="1.0"?> <ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05/"><Error><Code>RequestExpired</Code><Message>Request has expired. Timestamp date is 2016-08-09T11:42:19Z.</Message></Error><RequestId>c5852914-b6a1-474a-9977-28a20dcb5029</RequestId></ItemSearchErrorResponse>
何が、関数の*すべて*ローカル変数(TS、TT、P、エトセトラ) 'VAR/local'の範囲には忘れないでください:最初のUTCへ
now()
を変換してみません。また、CF10 +を使用している場合、[HMAC()はコア機能になりました](https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-h-im/hmac.html)。 – Leigh* 'var/local'はすべての関数ローカル変数をスコープします* ...可能な競合状態を避けるためです。 – Leigh