laowu il y a 1 semaine
Parent
commit
a0e72cd051

+ 9 - 2
app/Services/PayPlus.php

@@ -237,8 +237,8 @@ class PayPlus
             'phone' => $this->normalizePhone($user['phone'] ?? ''),
             'birthdate' => $this->stringOrDefault($user['birthdate'] ?? null, '1970-01-01'),
             'email' => $this->emailOrDefault($user['email'] ?? '', $userId),
-            'first_name' => $this->stringOrDefault($user['first_name'] ?? ($names[0] ?? null), 'unknown'),
-            'last_name' => $this->stringOrDefault($user['last_name'] ?? ($names[1] ?? null), 'user'),
+            'first_name' => $this->englishNameOrDefault($user['first_name'] ?? ($names[0] ?? null), 'unknown'),
+            'last_name' => $this->englishNameOrDefault($user['last_name'] ?? ($names[1] ?? null), 'user'),
             'zip' => $this->stringOrDefault($user['zip'] ?? null, '00000'),
             'city' => $this->stringOrDefault($user['city'] ?? null, 'unknown'),
             'state' => $this->stringOrDefault($user['state'] ?? null, 'NA'),
@@ -352,6 +352,13 @@ class PayPlus
         return $value === '' ? $default : $value;
     }
 
+    protected function englishNameOrDefault($value, $default)
+    {
+        $value = preg_replace('/[^A-Za-z]+/', '', (string) $value);
+
+        return $this->stringOrDefault($value, $default);
+    }
+
     protected function milliseconds()
     {
         return (int) round(microtime(true) * 1000);

+ 2 - 2
tests/Unit/PayPlusLogicTest.php

@@ -37,8 +37,8 @@ class PayPlusLogicTest extends TestCase
         $this->assertSame('12.34', $payload['amount']);
         $this->assertSame(2, $payload['payment_method']);
         $this->assertSame('10001', $payload['account_info']['merchant_user_id']);
-        $this->assertSame('user', $payload['account_info']['first_name']);
-        $this->assertSame('user', $payload['account_info']['last_name']);
+        $this->assertRegExp('/^[A-Z]user$/', $payload['account_info']['first_name']);
+        $this->assertRegExp('/^[A-Z]user$/', $payload['account_info']['last_name']);
     }
 
     /** @test */

+ 24 - 0
tests/Unit/PayPlusServiceTest.php

@@ -69,4 +69,28 @@ class PayPlusServiceTest extends TestCase
         $this->assertSame('user', $payload['last_name']);
         $this->assertSame(1234567890, $payload['timestamp']);
     }
+
+    /** @test */
+    public function it_keeps_only_english_letters_for_beneficiary_names()
+    {
+        $service = new PayPlus([]);
+
+        $payload = $service->buildBeneficiaryPayload([
+            'user_id' => 10002,
+            'first_name' => '张San-123',
+            'last_name' => '李User_456',
+        ], 1234567890);
+
+        $this->assertSame('San', $payload['first_name']);
+        $this->assertSame('User', $payload['last_name']);
+
+        $payload = $service->buildBeneficiaryPayload([
+            'user_id' => 10003,
+            'first_name' => '张三123',
+            'last_name' => '456-',
+        ], 1234567890);
+
+        $this->assertSame('unknown', $payload['first_name']);
+        $this->assertSame('user', $payload['last_name']);
+    }
 }