mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-12-29 18:04:42 +08:00
feat(tenpayv3): 新增平台收付通账号托管模式相关接口
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"out_request_no": "APPLYMENT_00000000001",
|
||||
"organization_type": "2",
|
||||
"finance_institution": true,
|
||||
"business_license_info": {
|
||||
"cert_type": "CERTIFICATE_TYPE_2388",
|
||||
"business_license_copy": "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4",
|
||||
"business_license_number": "123456789012345678",
|
||||
"merchant_name": "腾讯科技有限公司",
|
||||
"legal_person": "张三",
|
||||
"company_address": "深圳南山区科苑路",
|
||||
"business_time": "[\\\"2014-01-01\\\",\\\"长期\\\"]"
|
||||
},
|
||||
"finance_institution_info": {
|
||||
"finance_type": "BANK_AGENT",
|
||||
"finance_license_pics": [
|
||||
"example_finance_license_pics"
|
||||
]
|
||||
},
|
||||
"id_holder_type": "LEGAL",
|
||||
"id_doc_type": "IDENTIFICATION_TYPE_MACAO",
|
||||
"authorize_letter_copy": "47ZC6GC-vnrbEny_Ie_An5-tCpqxucuxi-vByf3Gjm7KEIUv0OF4wFNIO4kqg05InE4d2I6_H7I4",
|
||||
"id_card_info": {
|
||||
"id_card_copy": "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"id_card_national": "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4",
|
||||
"id_card_name": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
|
||||
"id_card_number": "AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw==",
|
||||
"id_card_valid_time_begin": "2019-06-06",
|
||||
"id_card_valid_time": "2026-06-06"
|
||||
},
|
||||
"id_doc_info": {
|
||||
"id_doc_copy": "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4",
|
||||
"id_doc_copy_back": "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4",
|
||||
"id_doc_name": "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"id_doc_number": "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"doc_period_begin": "2019-06-06",
|
||||
"doc_period_end": "2020-01-02"
|
||||
},
|
||||
"ubo_info_list": [
|
||||
{
|
||||
"ubo_id_doc_type": "IDENTIFICATION_TYPE_MAINLAND_IDCARD",
|
||||
"ubo_id_doc_copy": "jTpGmxUXqRTvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"ubo_id_doc_copy_back": "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"ubo_id_doc_name": "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==",
|
||||
"ubo_id_doc_number": "AOZdYGISxo4y44/Ug4P4TG5xzchG/5IL9DBd+Z0zZXkw==",
|
||||
"ubo_id_doc_address": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
|
||||
"ubo_id_doc_period_begin": "2019-06-06",
|
||||
"ubo_id_doc_period_end": "2026-06-06"
|
||||
}
|
||||
],
|
||||
"account_info": {
|
||||
"bank_account_type": "75",
|
||||
"account_bank": "工商银行",
|
||||
"account_name": "AOZdYGISxo4y44/UgZ69bdu9X+tfMUJ9dl+LetjM45/zMbrYu+wWZ8gn4CTdo+D/m9MrPg+V4sm73oxqdQu/hj7aWyDl4GQtPXVdaztB9jVbVZh3QFzV+BEmytMNQp9dt1uWJktlfdDdLR3AMWyMB377xd+m9bSr/ioDTzagEcGe+vLYiKrzcroQv3OR0p3ppFYoQ3IfYeU/04S4t9rNFL+kyblK2FCCqQ11NdbbHoCrJc7NV4oASq6ZFonjTtgjjgKsadIKHXtb3JZKGZjduGdtkRJJp0/0eow96uY1Pk7Rq79Jtt7+I8juwEc4P4TG5xzchG/5IL9DBd+Z0zZXkw==",
|
||||
"bank_branch_id": "402713354941",
|
||||
"bank_name": "施秉县农村信用合作联社城关信用社",
|
||||
"account_number": "d+xT+MQCvrLHUVDWv/8MR/dB7TkXM2YYZlokmXzFsWs35NXUot7C0NcxIrUF5FnxqCJHkNgKtxa6RxEYyba1+VBRLnqKG2fSy/Y5qDN08Ej9zHCwJjq52Wg1VG8MRugli9YMI1fI83KGBxhuXyemgS/hqFKsfYGiOkJqjTUpgY5VqjtL2N4l4z11T0ECB/aSyVXUysOFGLVfSrUxMPZy6jWWYGvT1+4P633f+R+ki1gT4WF/2KxZOYmli385ZgVhcR30mr4/G3HBcxi13zp7FnEeOsLlvBmI1PHN4C7Rsu3WL8sPndjXTd75kPkyjqnoMRrEEaYQE8ZRGYoeorwC+w=="
|
||||
},
|
||||
"contact_info": {
|
||||
"contact_type": "65",
|
||||
"contact_name": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
|
||||
"contact_id_doc_type": "IDENTIFICATION_TYPE_MACAO",
|
||||
"contact_id_card_number": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
|
||||
"contact_id_doc_copy": "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"contact_id_doc_copy_back": "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"contact_id_doc_period_begin": "2019-06-06",
|
||||
"contact_id_doc_period_end": "2026-06-06",
|
||||
"mobile_phone": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiR/cJiCrZxnAqi+pjeKIEdkwzXRAI7FUhrfPK3SNjaBTEu9GmsugMIA9r3x887Q+ODuC8HH2nzAn7NGpE/e3yiHgWhk0ps5k5DP/2qIdGdONoDzZelrxCl/NWWNUyB93K9F+jC1JX2IMttdY+aQ6zBlw0xnOiNW6Hzy7UtC+xriudjD5APomty7/mYNxLMpRSvWKIjOv/69bDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg=="
|
||||
},
|
||||
"sales_scene_info": {
|
||||
"store_name": "爱烧烤",
|
||||
"store_url": "http://www.qq.com",
|
||||
"store_qr_code": "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"mini_program_sub_appid": "wxa123344545577"
|
||||
},
|
||||
"settlement_info": {
|
||||
"settlement_id": 719,
|
||||
"qualification_type": "零售批发/生活娱乐/其他"
|
||||
},
|
||||
"merchant_shortname": "腾讯",
|
||||
"qualifications": [ "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4" ],
|
||||
"business_addition_pics": [ "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ", "47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4" ],
|
||||
"business_addition_desc": "特殊情况,说明原因",
|
||||
"proxy_sign_verify_mode": true
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"applyment_id": 2000002124775691,
|
||||
"out_request_no": "APPLYMENT_00000000001"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"out_request_no": "1900013511_10000",
|
||||
"applyment_id": 2000002124775691,
|
||||
"pre_sign_time": "2018-06-08T10:34:56+08:00",
|
||||
"proxy_verify_identity_info": {
|
||||
"verify_identity_type": "VERIFY_IDENTITY_TYPE_FACE_TO_FACE",
|
||||
"verify_identity_result": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"applyment_id": 2000002124775691
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"applyment_id": 2000002124775691,
|
||||
"out_request_no": "APPLYMENT_00000000001"
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"applyment_id": 2000002124775691,
|
||||
"out_request_no": "APPLYMENT_00000000001"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"merchant_code": "2492185251",
|
||||
"out_request_no": "1900013511_10000",
|
||||
"contact_info": {
|
||||
"contact_name": "pVd1HJ6zyvPedzGaV+X3IdGdbDnuC4Eelw/wDa4SzfeespQO/0kjiwfqdfg==",
|
||||
"contact_id_doc_type": "IDENTIFICATION_TYPE_IDCARD",
|
||||
"contact_id_card_number": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHDnuC4EL5Kz4jBHLiCyOb+tI0m2qhZ9evAM+Jv1z0NVa8MRtelw/wDa4SzfeespQO/0kjiwfqdfg==",
|
||||
"contact_id_doc_copy": "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"contact_id_doc_copy_back": "jTpGmxUX3FBWVQ5NJTZvvDujqhThn4ReFxikqJ5YW6zFQ",
|
||||
"contact_id_doc_period_begin": "2019-06-06",
|
||||
"contact_id_doc_period_end": "2026-06-06",
|
||||
"mobile_phone": "pVd1HJ6zyvPedzGaV+X3qtmrq9bb9tPROvwia4ibL+F6mfjbzQIzfb3HHLEjZ4YiNWWNeespQO/0kjiwfqdfg=="
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"apply_id": "20220617143306000013906025001",
|
||||
"out_request_no": "1900013511_10000",
|
||||
"merchant_code": "1900006491",
|
||||
"state": "APPLYMENT_STATE_AUDITING",
|
||||
"audit_reject_reason": "身份证背面识别失败,请上传更清晰的身份证图片。",
|
||||
"audit_reject_detail": [
|
||||
{
|
||||
"param_name": "ubo_info_list.card_number_0",
|
||||
"reject_reason": "身份证背面识别失败,请上传更清晰的身份证图片。"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"apply_id": "20220617143306000013906025001",
|
||||
"out_request_no": "1900013511_10000",
|
||||
"merchant_code": "1900006491",
|
||||
"state": "APPLYMENT_STATE_AUDITING",
|
||||
"audit_reject_reason": "身份证背面识别失败,请上传更清晰的身份证图片。",
|
||||
"audit_reject_detail": [
|
||||
{
|
||||
"param_name": "ubo_info_list.card_number_0",
|
||||
"reject_reason": "身份证背面识别失败,请上传更清晰的身份证图片。"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"apply_id": "20220617143306000013906025001",
|
||||
"state": "APPLYMENT_STATE_AUDITING"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"apply_id": "20220617143306000013906025001"
|
||||
}
|
||||
@@ -1324,6 +1324,68 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
|
||||
}
|
||||
}
|
||||
|
||||
[Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /mchalterapply/mchcontactalterapplyment)")]
|
||||
public async Task TestEncryptRequestSensitiveProperty_CreateMerchantAlterApplyMerchantContactAlterApplymentRequest()
|
||||
{
|
||||
static Models.CreateMerchantAlterApplyMerchantContactAlterApplymentRequest GenerateMockRequestModel()
|
||||
{
|
||||
return new Models.CreateMerchantAlterApplyMerchantContactAlterApplymentRequest()
|
||||
{
|
||||
Contact = new Models.CreateMerchantAlterApplyMerchantContactAlterApplymentRequest.Types.Contact()
|
||||
{
|
||||
ContactName = MOCK_PLAIN_STR,
|
||||
IdNumber = MOCK_PLAIN_STR,
|
||||
MobileNumber = MOCK_PLAIN_STR
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
static void AssertMockRequestModel(Models.CreateMerchantAlterApplyMerchantContactAlterApplymentRequest request, Func<string, string> decryptor)
|
||||
{
|
||||
Assert.NotEqual(MOCK_PLAIN_STR, request.Contact!.ContactName!);
|
||||
Assert.NotEqual(MOCK_PLAIN_STR, request.Contact!.IdNumber!);
|
||||
Assert.NotEqual(MOCK_PLAIN_STR, request.Contact!.MobileNumber!);
|
||||
Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.Contact!.ContactName!));
|
||||
Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.Contact!.IdNumber!));
|
||||
Assert.Equal(MOCK_PLAIN_STR, decryptor.Invoke(request.Contact!.MobileNumber!));
|
||||
Assert.Equal(MOCK_CERT_SN, request.WechatpaySerialNumber!, ignoreCase: true);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantRSACertificatePrivateKey))
|
||||
{
|
||||
using (var client = CreateMockClientUseRSA(autoEncrypt: false))
|
||||
{
|
||||
var request = GenerateMockRequestModel();
|
||||
client.EncryptRequestSensitiveProperty(request);
|
||||
AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
|
||||
}
|
||||
|
||||
using (var client = CreateMockClientUseRSA(autoEncrypt: true))
|
||||
{
|
||||
var request = GenerateMockRequestModel();
|
||||
await client.ExecuteCreateMerchantAlterApplyMerchantContactAlterApplymentAsync(request);
|
||||
AssertMockRequestModel(request, (cipher) => Utilities.RSAUtility.DecryptWithECB(RSA_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(TestConfigs.WechatMerchantSM2CertificatePrivateKey))
|
||||
{
|
||||
using (var client = CreateMockClientUseSM2(autoEncrypt: false))
|
||||
{
|
||||
var request = GenerateMockRequestModel();
|
||||
client.EncryptRequestSensitiveProperty(request);
|
||||
AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
|
||||
}
|
||||
|
||||
using (var client = CreateMockClientUseSM2(autoEncrypt: true))
|
||||
{
|
||||
var request = GenerateMockRequestModel();
|
||||
await client.ExecuteCreateMerchantAlterApplyMerchantContactAlterApplymentAsync(request);
|
||||
AssertMockRequestModel(request, (cipher) => Utilities.SM2Utility.Decrypt(SM2_PEM_PRIVATE_KEY, (EncodedString)cipher)!);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact(DisplayName = "测试用例:加密请求中的敏感数据([POST] /mchalterapply/mchsubjectalterapplyment)")]
|
||||
public async Task TestEncryptRequestSensitiveProperty_CreateMerchantAlterApplyMerchantSubjectAlterApplymentRequest()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user