Files
gpt-plus-gpt/pkg/stripe/checksum.go
2026-03-15 20:48:19 +08:00

48 lines
1.2 KiB
Go

package stripe
import (
"encoding/base64"
"net/url"
)
// mcL applies XOR(5) to each byte, then base64 encodes, then URL encodes.
// Mirrors the MC_L function in stripe.js.
func mcL(data string) string {
xored := make([]byte, len(data))
for i := 0; i < len(data); i++ {
xored[i] = data[i] ^ 5
}
b64 := base64.StdEncoding.EncodeToString(xored)
return url.QueryEscape(b64)
}
// lc applies a Caesar cipher on printable ASCII (32-126) with the given shift.
// Mirrors the LC function in stripe.js.
func lc(s string, shift int) string {
result := make([]byte, len(s))
for i := 0; i < len(s); i++ {
c := int(s[i])
if c >= 32 && c <= 126 {
result[i] = byte(((c - 32 + shift) % 95) + 32)
} else {
result[i] = s[i]
}
}
return string(result)
}
// JsChecksum computes the js_checksum field for Stripe confirm requests.
// ppageID is the checkout session ID (cs_xxx).
// Uses dynamically fetched SV from Stripe.js.
func JsChecksum(ppageID string) string {
sc := FetchStripeConstants()
return mcL(ppageID + ":" + sc.SV)
}
// RvTimestamp computes the rv_timestamp field for Stripe confirm requests.
// Uses dynamically fetched RV and RVTS from Stripe.js.
func RvTimestamp() string {
sc := FetchStripeConstants()
return lc(sc.RV+":"+sc.RVTS, 5)
}