package main import ( "crypto/md5" "fmt" "io" "net/url" ) func md5str(s string) string { h := md5.New() io.WriteString(h, s) return fmt.Sprintf("%x", h.Sum(nil)) } func md5LeanworkForm(form url.Values) string { s := "" if _, ok := form["pickupUrl"]; ok { s += form["pickupUrl"][0] s += form["receiveUrl"][0] s += form["signType"][0] s += form["orderNo"][0] s += form["orderAmount"][0] s += form["orderCurrency"][0] s += form["customerId"][0] s += Config.LeanWork.MD5Key } return md5str(s) } func isLeanworkFormValid(form url.Values) bool { r := md5LeanworkForm(form) sign := form["sign"][0] return r == sign } func md4RpnFormP2P(form url.Values) string { return md5RpnForm(form, Config.Rpn.MD5P2P) } func md5RpnFormFAT(form url.Values) string { return md5RpnForm(form, Config.Rpn.MD5FAT) } func md5RpnForm(form url.Values, md5key string) string { s := "" if _, ok := form["version"]; ok { s += "sign_type=" + form["sign_type"][0] + "|" s += "mid=" + form["mid"][0] + "|" s += "notify_url=" + form["notify_url"][0] + "|" s += "order_id=" + form["order_id"][0] + "|" s += "order_amount=" + form["order_amount"][0] + "|" s += "order_time=" + form["order_time"][0] + "|" s += "user_id=" + form["user_id"][0] + "|" s += "user_name=" + form["user_name"][0] + "|" s += "user_cardno=" + form["user_cardno"][0] + "|" s += "key=" + md5key } return md5str(s) }