目录
前言
可能看过我博客的朋友知道我主要是做的支付这一块的测试工作。而我们都知道现在比较流行的支付方式就是微信支付和支付宝支付,当然最近在使用低手续费大力推广的京东金融(已改名为京东数科)以后也可能站到第一队列,但是要在中国市场走到和财付通、蚂蚁金服一个层级就任重而道远了。
废话不多说,我们一起来看看微信支付签名的官方文档。搜索微信支付--点击支付开发文档--接口规则--安全规范。
我们会看的以下的内容:
签名生成的方法文档已经说的很清晰,下面我们一起来看看怎么使用golang来实现它,以及怎么使用一些更高级的特性来优化。
初始方式
最开始的方式比较直接,能实现这个需求就行:
func GetSign(sourceMap map[string]string, bizKey string) string {
orderedString := orderParam(sourceMap, bizKey)
md5Ctx := md5.New()
md5Ctx.Write([]byte(orderedString))
signString := md5Ctx.Sum(nil)
//fmt.Print(hex.EncodeToString(cipherStr))
return hex.EncodeToString(signString)
}
func orderParam(source map[string]string, bizKey string) string {
var tempArr []string
i := 0
for k, v := range source {
tempArr = append(tempArr, k+"="+v)
i++
}
sort.Strings(tempArr)
temString := ""
for n, v := range tempArr {
if n+1 < len(tempArr) {
temString = temString + v + "&"
} else {
temString = temString + v + bizKey
}
}
fmt.Println(temString)
return temString
}
代码说明
- orderParam主要用来把传递的参数转化为键值对的格式(即key1=value1&k