商户接入指南 商户接入指南
  • V2
  • V3 (opens new window)
  • V2
  • V3 (opens new window)
  • 接入指南

    • 起步
    • 名词约定
    • 对接流程(必读)
    • 签名规约
    • 服务端接入流程
    • 3D集成指南V1(From提交)
      • 接入说明
      • GET方式
      • POST方式
      • 如何集成
        • 代码示例
        • 调用示例
      • 专用测试资源
        • GET方式测试
        • POST方式测试
    • 3D集成指南V2(风控插件)
  • 接入方案

    • 收银台模式

      • 内嵌JS-SDK
      • 跳转接入
    • 端到端模式

      • 快速开始
      • 商户收银台规范
    • 交易处理方案

      • 处理交易状态
      • 交易数据处理方案
      • 交易状态处理方案
      • 自动续费场景处理方案
    • 开源建站工具插件支持

      • Magento235
      • Woocommerce
      • OpenCart
      • Prestashop
      • ZenCart
  • APIs

    • 交易下单

      • 收银台模式
      • 端到端模式
      • 退款和预授权
      • 修改交易信息
    • 交易查询

    • 快捷支付

    • 拒付查询

    • 物流信息

    • 交易账单

    • 币种汇率

    • 商户信息

  • 附录

  • v2

From表单3D集成指南

# From表单3D集成指南

# 接入说明

推荐使用风控插件集成方案

From表单3D集成方案是风控插件集成方案的备选方案。两种方案二选一,当前方案有一定限制,有部分交易通道的3d交易无法支持,会造成交易失败。 当前方案使用from表单的方式来提交必要的3d参数,并跳转到对应的3d验证页面。 该方案有两种情景分支,取决于requestMethod参数。

# GET方式

当requestMethod=GET时候,直接跳转到acsUrl上。跳转成功之后将会展示3d验证页面,用户必须在页面上完成3d验证, 此时,页面将会跳转shopperResultUrl。

{
"accId": "2021031111071710123362",
"acsUrl": "https://staging.gate.e-comprocessing.net/threeds/authentication/935ec31d7994841060327ed4cfddf98a",
"amount": "1",
"clientId": "2021031111071710123",
"code": "002000",
"connector": "THREEDSECURE",
"currency": "USD",
"description": "Transaction processing",
"language": "en",
"merchantTransactionId": "PShop20220224133957QE",
"paymentType": "SALE",
"relateTransactionId": "PS22022413395876528",
"requestMethod": "GET",
"shopperResultUrl": "https://test-pay.pingpongx.com/qa/result.html",
"sign": "004A34342C24BBCE29DC6DB198023D1E",
"signType": "MD5",
"status": "PROCESSING",
"termUrl": "https://sandbox-acquirer-payment.pingpongx.com/Ecp/threeDSecure/JJ3nGLGt0POPwIKaY2o4rawYlWkozh4A6HtSlOvmr05jNWvX0YKjJbu-q6u_yVtKYw11YBfbQ8V0H9egKh7ww2xvAq97R3Ym9lQ14FkXmoVxL_J-zKNktZ90lH3OMxFNals8kIzQrur21muzwdMX1Zn6clRQL26ZlHu4Ngd4Uh5udaHElBQt4hKEu3OquKJC",
"threedDHighLevelParams": {
"connector": "THREEDSECURE"
},
"transactionId": "PS22022413395876528",
"transactionTime": "1645681200000"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# POST方式

当requestMethod=POST时候,需要通过构造From表单提交的形式来跳转到acsUrl上。跳转成功之后将会展示3d验证页面,用户必须在页面上完成3d验证, 此时,页面将会跳转shopperResultUrl。

{
	"accId": "2018092714313010016305",
	"acsUrl": "https://test.ppipe.net/connectors/demo/submit?action=ACI3DS2AccessControlServer&ndcid=8ac7a4c872dae5960172e0bb0ed216eb_fef6e13247004dd4bfa778d6542b21a8&acsRequest=CHALLENGE&acsData=eyJUSFJFRURTU0VSVkVSX1VSTCI6Imh0dHBzOi8vdGVzdC5wcGlwZS5uZXQvY29ubmVjdG9ycy9hcl9zaW11bGF0b3IvM2RzMjtqc2Vzc2lvbmlkPTA5NzI0MTlFNUQ4Njc5MzVBQkExREMzRDI5OEQ1NkJFLnVhdDAxLXZtLWNvbjAyP2FzeW5jc291cmNlPUFDSV8zRFNfMiZ0eXBlPXJlc3VsdHMmbmRjaWQ9OGFjN2E0Yzg3MmRhZTU5NjAxNzJlMGJiMGVkMjE2ZWJfZmVmNmUxMzI0NzAwNGRkNGJmYTc3OGQ2NTQyYjIxYTgiLCJEU19UUkFOU19JRCI6ImRiNGU3MzE4LTM3NzItNGZmZi1iNzk3LTYwZGMxZTcwNzM1YyIsIkRBVEUiOiIyNC4wMi4yMDIyIiwiZGVsYXkiOiJOT05FIiwiVEhSRUVEU1NFUlZFUl9UUkFOU19JRCI6IjczMmJlNzJiLTY4MDYtNDNjYS04MGQzLWVlZWQ5NTBlOTc1MiIsIkFNT1VOVCI6IjMuMDAgVVNEIiwiTk9USUZJQ0FUSU9OX1VSTCI6Imh0dHBzOi8vdGVzdC5wcGlwZS5uZXQvY29ubmVjdG9ycy9hcl9zaW11bGF0b3IvM2RzMjtqc2Vzc2lvbmlkPTA5NzI0MTlFNUQ4Njc5MzVBQkExREMzRDI5OEQ1NkJFLnVhdDAxLXZtLWNvbjAyP2FzeW5jc291cmNlPUFDSV8zRFNfMiZ0eXBlPW5vdGlmaWNhdGlvbiZuZGNpZD04YWM3YTRjODcyZGFlNTk2MDE3MmUwYmIwZWQyMTZlYl9mZWY2ZTEzMjQ3MDA0ZGQ0YmZhNzc4ZDY1NDJiMjFhOCIsIlZFUlNJT04iOiIyLjIuMCIsIkFDU19UUkFOU19JRCI6ImE4Njg1Yzk5LTAyMjMtNGUyYS1hZDYwLTczMzAwMzllZWM4ZSIsIkRFVklDRV9DSEFOTkVMIjoiMDIiLCJTRVJWSUNFX1RZUEUiOiJWZXJpZmllZEJ5VklTQSIsIkNBUkRfTlVNQkVSIjoiKioqKioqKioqKioqMDAxMCJ9",
	"amount": "3",
	"clientId": "2018092714313010016",
	"code": "002000",
	"connector": "THREEDSECURE",
	"currency": "USD",
	"description": "Transaction processing",
	"language": "en",
	"merchantTransactionId": "PShop20220224203014SU",
	"paymentType": "SALE",
	"relateTransactionId": "PS22022420301688245",
	"requestMethod": "POST",
	"shopperResultUrl": "https://test-pay.pingpongx.com/qa/result.html",
	"sign": "02E6971AF9EF84A420598EE7FCF1D9F8",
	"signType": "MD5",
	"status": "PROCESSING",
	"termUrl": "https://test-acquirer-payment.pingpongx.com/Trustpay/threeDSecure/I9ye-Pu3Pf0I76EcnAHeSPJ3ZuGvdjyOOBqKXHcZ_j7QZlbBmygt62-UeZ_sIELzQcC0lLewqUTr4tXGJdDLfF8AwXJxTKrWHl7SSK5XpEDPF2z8972p6u0wJuVVAnMaQ-mBFIhOYIvJeF1lDh6QsFomF8eiEDjAvgq-P5mDXTyxIguBCakZjFwqM17awTlF",
	"threedDHighLevelParams": {
		"creq": "eyJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMi4wIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiI3MzJiZTcyYi02ODA2LTQzY2EtODBkMy1lZWVkOTUwZTk3NTIiLCJhY3NUcmFuc0lEIjoiYTg2ODVjOTktMDIyMy00ZTJhLWFkNjAtNzMzMDAzOWVlYzhlIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjA1In0",
		"threeDSSessionData": ""
	},
	"transactionId": "PS22022420301688245",
	"transactionTime": "1645705819000"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 如何集成

为保证3d页面正常展示,我们需要综合考虑这两种方式。

  • 当acsUrl不存在时候,不需要3d跳转。
  • 存在,则按照上述方式进行跳转。

以下代码封装这个流程,可供参考。

如何调用:复制代码到你的工程中,然后将交易接口的返回对象传入。

# 代码示例

function threeDFormToSubmit(responseBody) {
    //打印入参
    console.log('responseBody:', responseBody)

    let acsUrl = null
    let requestMethod = null
    let threedDHighLevelParams = null

    if (responseBody.hasOwnProperty('threedDHighLevelParams')) {
        threedDHighLevelParams = responseBody.threedDHighLevelParams
    }
    // 首先看返回值最外层是否有threedDHighLevelParams 有则在 threedDHighLevelParams里面去acsUrl
    if (threedDHighLevelParams !== null && threedDHighLevelParams.hasOwnProperty('acsUrl')) {
        acsUrl = threedDHighLevelParams.acsUrl
        //其次 如果没有渠道 就看responseBody 最外层是否有acsUrl
    } else if (responseBody.hasOwnProperty('acsUrl')) {
        acsUrl = responseBody.acsUrl
    } else {
        //都没有的情况 直接跳出 不走3d
        console.log('acsUrl 为空')
        return
    }

    //requestMethod 存在就取,不存在 报错退出
    if (responseBody.hasOwnProperty('requestMethod')) {
        requestMethod = responseBody.requestMethod
    } else {
        console.log('requestMethod 为空')
        return
    }

    //requestMethod 是GET的情况 直接跳转acsUrl 并退出
    if (requestMethod.toUpperCase() === 'GET') {
        window.location.href = acsUrl
        return
    }
    //POST的情况 构建form表单来提交跳转到3d验证页面
    let threeDForm = document.createElement('form')
    let htmlString = ''
    //遍历threedDHighLevelParams  取键值对赋值为表单项的name和value
    for (const threedDHighLevelParamsKey in threedDHighLevelParams) {
        if (threedDHighLevelParams.hasOwnProperty(threedDHighLevelParamsKey)) {
            htmlString = htmlString.concat('<input type="hidden" name="' + threedDHighLevelParamsKey + '" value="' + threedDHighLevelParams[threedDHighLevelParamsKey] + '"/>')
            console.log('name', threedDHighLevelParamsKey, 'value', threedDHighLevelParams)
        } else {
            console.log('未知错误 不存在参数 ', threedDHighLevelParamsKey)
        }
    }
    threeDForm.innerHTML=htmlString;
    threeDForm.action = acsUrl
    threeDForm.method = requestMethod;
    console.log(htmlString)
    console.log(threeDForm)
    //手动提交 调试用
    // let submitInput = document.createElement('input')
    // submitInput.type = 'submit'
    // threeDForm.appendChild(submitInput)
    //规范Form submission algorithm https://codereview.chromium.org/2416033002
    //解决Chrome56 不能提交的问题
    window.document.body.appendChild(threeDForm)
    //自动提交
    threeDForm.submit();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

# 调用示例

threeDFormToSubmit({
    'accId': '2020083116203010128130',
    'acsUrl': 'https://test.ppipe.net/connectors/demo/submit?action=ACI3DS2AccessControlServer&ndcid=8ac7a4c872dae5960172e0bb0ed216eb_3a64b9a22f544e3b8b9e69bf36d51ad4&acsRequest=CHALLENGE&acsData=eyJUSFJFRURTU0VSVkVSX1VSTCI6Imh0dHBzOi8vdGVzdC5wcGlwZS5uZXQvY29ubmVjdG9ycy9hcl9zaW11bGF0b3IvM2RzMjtqc2Vzc2lvbmlkPUIwMzQxOTgyNzI4RkY3MDM0MTZGRjZEMUY2NTM2RDNDLnVhdDAxLXZtLWNvbjAzP2FzeW5jc291cmNlPUFDSV8zRFNfMiZ0eXBlPXJlc3VsdHMmbmRjaWQ9OGFjN2E0Yzg3MmRhZTU5NjAxNzJlMGJiMGVkMjE2ZWJfM2E2NGI5YTIyZjU0NGUzYjhiOWU2OWJmMzZkNTFhZDQiLCJEU19UUkFOU19JRCI6IjhkMDUwN2QzLTY3OWMtNDBhNi04NmRiLTdkMDg5OTBmMDBhNSIsIkRBVEUiOiIyNC4wMi4yMDIyIiwiZGVsYXkiOiJOT05FIiwiVEhSRUVEU1NFUlZFUl9UUkFOU19JRCI6ImFlMzYxYmQ0LWZjMGItNDk2Ni1hZDRmLWEyMTQ2OTA0NDMxNiIsIkFNT1VOVCI6IjMuMDAgVVNEIiwiTk9USUZJQ0FUSU9OX1VSTCI6Imh0dHBzOi8vdGVzdC5wcGlwZS5uZXQvY29ubmVjdG9ycy9hcl9zaW11bGF0b3IvM2RzMjtqc2Vzc2lvbmlkPUIwMzQxOTgyNzI4RkY3MDM0MTZGRjZEMUY2NTM2RDNDLnVhdDAxLXZtLWNvbjAzP2FzeW5jc291cmNlPUFDSV8zRFNfMiZ0eXBlPW5vdGlmaWNhdGlvbiZuZGNpZD04YWM3YTRjODcyZGFlNTk2MDE3MmUwYmIwZWQyMTZlYl8zYTY0YjlhMjJmNTQ0ZTNiOGI5ZTY5YmYzNmQ1MWFkNCIsIlZFUlNJT04iOiIyLjIuMCIsIkFDU19UUkFOU19JRCI6IjY2MmUxZTBiLTMyNjMtNGZkYi05NDFkLWUwOTNlMTk2YzAyMCIsIkRFVklDRV9DSEFOTkVMIjoiMDIiLCJTRVJWSUNFX1RZUEUiOiJWZXJpZmllZEJ5VklTQSIsIkNBUkRfTlVNQkVSIjoiKioqKioqKioqKioqMDAxMCJ9',
    'amount': '3',
    'clientId': '2020083116203010128',
    'code': '002000',
    'connector': 'THREEDSECURE',
    'currency': 'USD',
    'description': 'Transaction processing',
    'language': 'en',
    'merchantTransactionId': 'PShop20220224213231PZ',
    'paymentType': 'SALE',
    'relateTransactionId': 'PS22022421323376578',
    'requestMethod': 'POST',
    'shopperResultUrl': 'https://test-pay.pingpongx.com/qa/result.html',
    'sign': '5CCBBC38F3715EAA6175B18D39A1D1F9',
    'signType': 'MD5',
    'status': 'PROCESSING',
    'termUrl': 'https://sandbox-acquirer-payment.pingpongx.com/Trustpay/threeDSecure/JJ3nGLGt0POPwIKaY2o4rbFcBJh1rJjRi6JNyqIdHfAkO4fAqbLsehEro9udjUCTFH-3Ja03glevv61coQUK9-jEHA6A53H8Y70jeJn-ZPy5f7hhNANPdPoYgVk696RsTNsjXbBoszJJhaFwog_fzUEFbpimveK6NOTEZyRRg6NveGE_UPaYfYFPTVbq44G-',
    'threedDHighLevelParams': {
        'creq': 'eyJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMi4wIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiJhZTM2MWJkNC1mYzBiLTQ5NjYtYWQ0Zi1hMjE0NjkwNDQzMTYiLCJhY3NUcmFuc0lEIjoiNjYyZTFlMGItMzI2My00ZmRiLTk0MWQtZTA5M2UxOTZjMDIwIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjA1In0',
        'threeDSSessionData': ''
    },
    'transactionId': 'PS22022421323376578',
    'transactionTime': '1645709554000'
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 专用测试资源

# GET方式测试

参数名称 值
邮箱 3dtest@pingpongx.com
accId 2021031111071710123362
clientId 2021031111071710123
salt 450E64BD1030F265A5A870D7
测试专用卡号 4711100000000000
测试金额 30

# POST方式测试

参数名称 值
邮箱 3ds@pingpongx.com
accId 2020083116203010128130
clientId 2020083116203010128
salt F78BC96A55548B2319EE68E0
测试专用卡号 4000000000000010
threeDSecure Y
上次更新: 2022/04/14, 11:35:16
服务端接入流程
3D集成指南V2(风控插件)

← 服务端接入流程 3D集成指南V2(风控插件)→

杭州乒乓智能技术有限公司 | Copyright © 2015-2024 All rights reserved. pay.pingpongx.com
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式