package union_pay import ( "crypto/sha256" "fmt" "strconv" ) func Sha(version, appId, bizMethod, reId, body string) string { s := fmt.Sprintf("version=%s&appId=%s&bizMethod=%s&reqId=%s&body=%s", version, appId, bizMethod, reId, body) return encodeBySHA256([]byte(s)) } func encodeBySHA256(str []byte) string { hash := sha256.Sum256(str) return getFormattedText(hash[:]) } func getFormattedText(bytes []byte) string { HexDigits := "0123456789abcdef" l := len(bytes) buf := make([]byte, l*2) for j := 0; j < l; j++ { buf[j*2] = HexDigits[(bytes[j]>>4)&0x0f] buf[j*2+1] = HexDigits[bytes[j]&0x0f] } return string(buf) } func ConvertToInt(value interface{}) int { switch v := value.(type) { case string: if intValue, err := strconv.Atoi(v); err == nil { return intValue } case int: return v } return 0 } // HexToBytes 将16进制的字符数组转换成byte数组 func HexToBytes(hex []byte) []byte { length := len(hex) / 2 raw := make([]byte, length) for i := 0; i < length; i++ { high, _ := strconv.ParseInt(string(hex[i*2]), 16, 0) low, _ := strconv.ParseInt(string(hex[i*2+1]), 16, 0) value := int(high<<4) | int(low) if value > 127 { value -= 256 } raw[i] = byte(value) } return raw }