package leshua import ( "testing" "hfb_sys/backend/internal/config" ) func TestSignUsesASCIISortedNonEmptyParams(t *testing.T) { params := map[string]string{ "service": "get_tdcode", "merchant_id": "1234567890", "third_order_id": "NO1", "amount": "100", "nonce_str": "abc", "empty": "", "sign": "ignored", } got := Sign(params, "secret", SignOptions{}) want := "1E7892034AA77899E8DD609C4FA09E76" if got != want { t.Fatalf("Sign() = %s, want %s", got, want) } } func TestVerifyNotifyIncludesEmptyAndExcludesErrorCode(t *testing.T) { client := NewClient(config.LeshuaPaymentConfig{NotifyKey: "notify-secret"}) params := map[string]string{ "merchant_id": "1234567890", "third_order_id": "NO1", "leshua_order_id": "LS1", "amount": "100", "status": "2", "attach": "", "error_code": "-20001", } params["sign"] = Sign(params, "notify-secret", SignOptions{ IncludeEmpty: true, ExcludeKeys: []string{"error_code", "sign"}, }) if !client.VerifyNotify(params) { t.Fatal("VerifyNotify() = false, want true") } params["amount"] = "101" if client.VerifyNotify(params) { t.Fatal("VerifyNotify() = true after amount changed, want false") } } func TestVerifyNotifyFallsBackToSignKey(t *testing.T) { client := NewClient(config.LeshuaPaymentConfig{ NotifyKey: "wrong-notify-secret", SignKey: "sign-secret", }) params := map[string]string{ "merchant_id": "1234567890", "third_order_id": "NO1", "leshua_order_id": "LS1", "amount": "100", "status": "2", } params["sign"] = Sign(params, "sign-secret", SignOptions{ IncludeEmpty: true, ExcludeKeys: []string{"error_code", "sign"}, }) result := client.VerifyNotifyDetail(params) if !result.OK { t.Fatal("VerifyNotifyDetail().OK = false, want true") } if result.MatchedKey != "sign_key" { t.Fatalf("MatchedKey = %s, want sign_key", result.MatchedKey) } } func TestParsePayloadSupportsFormAndXML(t *testing.T) { form, err := ParsePayload([]byte("third_order_id=NO1&status=2&amount=100")) if err != nil { t.Fatalf("ParsePayload(form) error = %v", err) } if form["third_order_id"] != "NO1" || form["status"] != "2" || form["amount"] != "100" { t.Fatalf("ParsePayload(form) = %#v", form) } xml, err := ParsePayload([]byte("NO26")) if err != nil { t.Fatalf("ParsePayload(xml) error = %v", err) } if xml["third_order_id"] != "NO2" || xml["status"] != "6" { t.Fatalf("ParsePayload(xml) = %#v", xml) } }