Paypal IPN 和 Golang 在 GAE 上的集成

我正在编写一个用于处理 Paypal IPN 消息和响应的侦听器。


根据 Paypal IPN 要求,侦听器必须以相同的顺序发布从 Paypal 接收到的值,并在值列表的前面插入一个新参数“cmd=_notify-validate”。


您的侦听器 HTTP 将完整的、未更改的消息 POST 回 PayPal。注意:此消息必须包含与来自 PayPal 的原始 IPN相同的字段,顺序相同,所有字段都以 cmd=_notify-validate 开头。此外,此消息必须使用与原始消息相同的编码。


但是,Go 的 url.Values 变量是在 map 数据结构中实现的,每次迭代时不保证值的顺序相同。


...使用范围循环遍历地图时,未指定迭代顺序并且不能保证从一次迭代到下一次迭代顺序相同”


并且当调用 url.Values 编码方法时,它将按键排序


Encode 将值编码为按键排序的“URL 编码”形式(“bar=baz&foo=quux”)。


侦听器在 GAE 上运行,因此我使用“appengine/urlfetch”的 PostForm 函数,它将 url.Values 作为第二个参数


c := appengine.NewContext(r)

client := urlfetch.Client(c)

resp, err := client.PostForm("https://www.sandbox.paypal.com/cgi-bin/webscr", r.Form)

由于 url.Values 是一个映射,因此不保证映射中值的顺序是有序的。我怎么可能以从 Paypal IPN 接收到的相同顺序将参数值传递回带有 GAE urlfetch 服务的 Paypal?


有只小跳蛙
浏览 251回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go