我总是得到相同的错误3045:发布此表单时缺少货币字段:
<form name="frmPay" action="https://test.sagepay.com/gateway/service/vspform-register.vsp" method="POST">
<input type="text" name="VPSProtocol" value="3.00" />
<input type="text" name="TxType" value="PAYMENT" />
<input type="text" name="Vendor" value="myvendor" />
Crypt:<textarea rows="10" cols="200" name="Crypt"><%=Crypt%></textarea>
<input type="submit" value="Send" />
</form>
我认为错误在于加密
有人可以为经典ASP发送加密例程吗?
答案 0 :(得分:3)
更新(2014年11月19日):有关该主题的another question有用的链接。
https://www.sagepaylabs.com/AES.zip
该文件包含如何使用AES Rijndael Block Cipher的修改版本实现AES(128位)的经典ASP示例,该版本最初由Phil Fresle(2001)编写,但已被Sage Pay的Mat Peck修改为与带有CBC和PKCS#5填充的128位块(AES)。
Classic ASP示例包含两个文件
includes.asp rijndael.asp
Sage Pay Form Integration要求非常具体。
来自Form integration protocol and guidelines
A1.1地穴字段
Crypt字段应包含纯文本中的所有其他事务信息(请参阅下一节)Name = Value字段 用'&amp;'字符分隔。确保所有必填字段都存在且“&amp;”字符后面没有空格。
然后应使用AES(块大小为128位)在CBC模式下使用提供的PKCS#5填充加密此字符串 密码作为密钥和初始化向量,并以十六进制编码结果(确保字母为大写)。
- 醇>
将
@
符号添加到编码结果的开头。注意:要解密,请在解密模式下使用相同的步骤,确保在执行此操作之前删除
@
符号。
示例加密字段
使用键
55a51621a6648525
要加密以下请求,我们应该在其下面获得加密结果键值对
VendorTxCode=TxCode-1310917599-223087284&Amount=36.95&Currency=GBP &Description=description&CustomerName=FnameSurname &CustomerEMail=customer@example.com&BillingSurname=Surname &BillingFirstnames=Fname&BillingAddress1=BillAddress Line 1 &BillingCity=BillCity&BillingPostCode=W1A 1BL &BillingCountry=GB&BillingPhone=447933000000&DeliveryFirstnames=Fname &DeliverySurname=Surname&DeliveryAddress1=BillAddress Line 1 &DeliveryCity=BillCity&DeliveryPostCode=W1A 1BL &DeliveryCountry=GB&DeliveryPhone=447933000000 &SuccessURL=https://example.com/success&FailureURL=https://example.co/failure
加密结果
@2DCD27338114D4C39A14A855702FBAB2EF40BCAC2D76A3ABC0F660A07E9C1C921C2C755BA9B59C39F882FBF6DFED114F23141D94E50A01A665B1E3 1A86C07CA1CD1BB8EF5B6CF2C23D495CD79F9C0F678D61773E7A1AA30AA5B23D56503FC0B52AC0694A8C341263D2C5FE1BAD93BDB94726761E155E9 00448F644AF1F67BE1AC77E852B9D90809A44F258EE9478B6D8C1C4ED58759263E7DBF8871C6592287C0358F36F4EEC326CEDDD440DA2FED8AB35F1B 630A5C6FA671E4D78CC8CACECF9DFDC31D6C5EC8270FB21E297E2C2E14F99A04223EFFD4F00062D440E78A3D2C7140EC8F123D247B75E7482AE98858 DA34D37EDE6D7C69AA74391F559305CF675ADB3615244A107ABBB6AF26E29A2FFA059B12688D90FE09E0DE069325BFF3587A695F5DA36E4B809B69C C9A37034F166B63B5A62B986F4DA34E9AC9516AFDE70642EC7DAD1AEBA93A1F347D6AC7046E967DCBFE7ACFCEE5DAFC0B29F1765032B3060EBE565C BD57D092075D15CF12725199C6881605B2E0F105698CE3ADD04361CA9D620C187B90E3F9849445B5C3C0FDF1768BFFD61F97E51316826F4F10E0E3E6 68F0A9F5ED9CCDA6F2C7CC957F12DB48F9041482E3D035E7A91852C404BFA325FED947E71F57B871DFAC6AF4FF29F4513A4A80B2D7ECC9D19D47ED04 FA99CDFC881DFA771E1EA4F3F9B2C5AC673EF3DA2699A309CC8522993A63CB8D45D3CDF09B1DFDC573CD19679B250AD6721450B5042F201670B4645 05DCAEF59E2C67ABACC9AE2EEE793CE191FEBF66B8FAF4204EFFB359246B9C99FB52805C46375FF35140F74707FBC73C7731A28A2C883A
考虑到这些要求意味着您对经典ASP环境中可用选项的限制。
我建议使用AspEncrypt by Persit Software或我能找到的唯一其他有前途的选项是(Classic ASP) AES Encryption,但由于我没有使用这些组件中的任何一个,我无法保证它们有多好或多坏
但是我之前在使用经典ASP进行网页开发时使用过Persit组件,并且可以说他们一直都在为我工作,所以我的建议是看看你的想法。
它似乎支持所需的要求,这里有一个示例based on code from the documentation被操纵以适应。
<%
Dim CM, Context, Key, Blob, Crypt
Set CM = Server.CreateObject("Persits.CryptoManager")
'AES requires the Microsoft Enhanced RSA and AES Cryptographic Provider.
'Set Context = CM.OpenContext("", True )
Set Context = CM.OpenContextEx( _
"Microsoft Enhanced RSA and AES Cryptographic Provider", "", True _
)
Set Blob = CM.CreateBlob
Blob.Hex = "Hex Encoded Key given to you by Sage Pay" 'AES-128 Bit Key
'Might need to reverse the bytes which is why the third parameter is set to True.
Set Key = Context.ImportRawKey(Blob, calgAES128, True)
'Make sure padding is set to PKCS#5 and Cipher Mode is set to CBC
'these don't actually need defining because they are the defaults
'according to the documentation, just here for completeness.
Key.Padding = ccpPKCS5
Key.Mode = ccmCBC
Set Blob = Key.EncryptText("your key value pairs")
'Format encrypted field as required by Sage Pay
Crypt = "@" + Blob.Hex
%>
有用的链接