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 MD5LeanworkFormP2P(form url.Values) string { return md5LeanworkForm(form, Config.LeanWork.MD5P2P) } func MD5LeanworkFormFAT(form url.Values) string { return md5LeanworkForm(form, Config.LeanWork.MD5FAT) } func md5LeanworkForm(form url.Values, key string) 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 += key } //fmt.Println("leanwork form: " + s) return md5str(s) } func isLeanworkFormValid(form url.Values, md5key string) bool { r := md5LeanworkForm(form, md5key) sign := form["sign"][0] return r == sign } func md5RpnFormP2P(r RpnOut) string { return md5RpnForm(r, Config.Rpn.MD5P2P) } func md5RpnFormFAT(r RpnOut) string { return md5RpnForm(r, Config.Rpn.MD5FAT) } func md5RpnForm(r RpnOut, md5key string) string { s := "" s += "version=" + r.Version + "|" s += "sign_type=" + r.Sign_type + "|" s += "mid=" + r.Mid + "|" s += "notify_url=" + r.Notify_url + "|" s += "order_id=" + r.Order_id + "|" s += "order_amount=" + r.Order_amount + "|" s += "order_time=" + r.Order_time + "|" s += "user_id=" + r.User_id + "|" s += "user_name=" + r.User_name + "|" s += "user_cardno=" + r.User_cardno + "|" s += "key=" + md5key // fmt.Println(s) // fmt.Println(md5str(s)) return md5str(s) }