| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- package provider
- import (
- "testing"
- )
- func TestEasyPaySignConsistentOutput(t *testing.T) {
- t.Parallel()
- params := map[string]string{
- "pid": "1001",
- "type": "alipay",
- "out_trade_no": "ORDER123",
- "name": "Test Product",
- "money": "10.00",
- }
- pkey := "test_secret_key"
- sign1 := easyPaySign(params, pkey)
- sign2 := easyPaySign(params, pkey)
- if sign1 != sign2 {
- t.Fatalf("easyPaySign should be deterministic: %q != %q", sign1, sign2)
- }
- if len(sign1) != 32 {
- t.Fatalf("MD5 hex should be 32 chars, got %d", len(sign1))
- }
- }
- func TestEasyPaySignExcludesSignAndSignType(t *testing.T) {
- t.Parallel()
- pkey := "my_key"
- base := map[string]string{
- "pid": "1001",
- "type": "alipay",
- }
- withSign := map[string]string{
- "pid": "1001",
- "type": "alipay",
- "sign": "should_be_ignored",
- "sign_type": "MD5",
- }
- signBase := easyPaySign(base, pkey)
- signWithExtra := easyPaySign(withSign, pkey)
- if signBase != signWithExtra {
- t.Fatalf("sign and sign_type should be excluded: base=%q, withExtra=%q", signBase, signWithExtra)
- }
- }
- func TestEasyPaySignExcludesEmptyValues(t *testing.T) {
- t.Parallel()
- pkey := "key123"
- base := map[string]string{
- "pid": "1001",
- "type": "alipay",
- }
- withEmpty := map[string]string{
- "pid": "1001",
- "type": "alipay",
- "device": "",
- "clientip": "",
- }
- signBase := easyPaySign(base, pkey)
- signWithEmpty := easyPaySign(withEmpty, pkey)
- if signBase != signWithEmpty {
- t.Fatalf("empty values should be excluded: base=%q, withEmpty=%q", signBase, signWithEmpty)
- }
- }
- func TestEasyPayVerifySignValid(t *testing.T) {
- t.Parallel()
- params := map[string]string{
- "pid": "1001",
- "type": "alipay",
- "out_trade_no": "ORDER456",
- "money": "25.00",
- }
- pkey := "secret"
- sign := easyPaySign(params, pkey)
- // Add sign to params (as would come in a real callback)
- params["sign"] = sign
- params["sign_type"] = "MD5"
- if !easyPayVerifySign(params, pkey, sign) {
- t.Fatal("easyPayVerifySign should return true for a valid signature")
- }
- }
- func TestEasyPayVerifySignTampered(t *testing.T) {
- t.Parallel()
- params := map[string]string{
- "pid": "1001",
- "type": "alipay",
- "out_trade_no": "ORDER789",
- "money": "50.00",
- }
- pkey := "secret"
- sign := easyPaySign(params, pkey)
- // Tamper with the amount
- params["money"] = "99.99"
- if easyPayVerifySign(params, pkey, sign) {
- t.Fatal("easyPayVerifySign should return false for tampered params")
- }
- }
- func TestEasyPayVerifySignWrongKey(t *testing.T) {
- t.Parallel()
- params := map[string]string{
- "pid": "1001",
- "type": "wxpay",
- }
- sign := easyPaySign(params, "correct_key")
- if easyPayVerifySign(params, "wrong_key", sign) {
- t.Fatal("easyPayVerifySign should return false with wrong key")
- }
- }
- func TestEasyPaySignEmptyParams(t *testing.T) {
- t.Parallel()
- sign := easyPaySign(map[string]string{}, "key123")
- if sign == "" {
- t.Fatal("easyPaySign with empty params should still produce a hash")
- }
- if len(sign) != 32 {
- t.Fatalf("MD5 hex should be 32 chars, got %d", len(sign))
- }
- }
- func TestEasyPaySignSortOrder(t *testing.T) {
- t.Parallel()
- pkey := "test_key"
- params1 := map[string]string{
- "a": "1",
- "b": "2",
- "c": "3",
- }
- params2 := map[string]string{
- "c": "3",
- "a": "1",
- "b": "2",
- }
- sign1 := easyPaySign(params1, pkey)
- sign2 := easyPaySign(params2, pkey)
- if sign1 != sign2 {
- t.Fatalf("easyPaySign should be order-independent: %q != %q", sign1, sign2)
- }
- }
- func TestEasyPayVerifySignWrongSignValue(t *testing.T) {
- t.Parallel()
- params := map[string]string{
- "pid": "1001",
- "type": "alipay",
- }
- pkey := "key"
- if easyPayVerifySign(params, pkey, "00000000000000000000000000000000") {
- t.Fatal("easyPayVerifySign should return false for an incorrect sign value")
- }
- }
- func TestEasyPayMerchantIdentityMetadata(t *testing.T) {
- t.Parallel()
- provider := &EasyPay{
- config: map[string]string{
- "pid": "1001",
- },
- }
- metadata := provider.MerchantIdentityMetadata()
- if metadata["pid"] != "1001" {
- t.Fatalf("pid = %q, want %q", metadata["pid"], "1001")
- }
- }
|