Alipay+ DocsAlipay+ Docs

发码方表

发码方表列出了不同长度用户展示码的发码方ID (CII) 及对应的发码方,并提供了描述码长度及格式的正则表达式。 使用该表,可追踪用户展示码发码方,也可通过码长度、码格式和发码方ID来辨别发码方如下所示:

表1.2:发码方表示例(最后更新于2020年6月16日)

反扫码长度

发码方ID

其他条件

正则表达式

发码方

17

28

N/A

28[0-9]{15}

PSP 1

18

28

N/A

28[0-9]{16}

PSP 2

19

280 ~ 288

N/A

28[0-8]{17}

PSP 3

19

289

第 14 个字节不等于 “6”

289[0-9]{10}[0-57-9][0-9]{5}

PSP 4

19

289

第 14 个字节等于 “6”

289[0-9]{10}6[0-9]{5}

PSP 5

24

28100100 ~ 28100199

N/A

281001[0-9]{18}

PSP 6

24

28100300 ~ 28100399

N/A

281003[0-9]{18}

PSP 7

24

28100400 ~ 28100499

N/A

281004[0-9]{18}

PSP 8

24

28100500 ~ 28100599

N/A

281005[0-9]{18}

PSP 9

24

28100600 ~ 28100699

N/A

281006[0-9]{18}

PSP 10

24

28100700 ~ 28100799

N/A

281007[0-9]{18}

PSP 11

24

28100900 ~ 28100999

N/A

281009[0-9]{18}

PSP 12

24

28101000 ~ 28101099

N/A

281010[0-9]{18}

PSP 13

24

28101100 ~ 28101199

N/A

281011[0-9]{18}

PSP 14

24

28101200 ~ 28101299

N/A

281012[0-9]{18}

PSP 15

24

28101300 ~ 28101399

N/A

281013[0-9]{18}

PSP 16

24

28101400 ~ 28101499

N/A

281014[0-9]{18}

PSP 17

24

28101800 ~ 28101899

N/A

281018[0-9]{18}

PSP 18

24

28101900 ~ 28101999

N/A

281019[0-9]{18}

PSP 19

24

28102000 ~ 28102099

N/A

281020[0-9]{18}

PSP 20

24

28102100 ~ 28102199

N/A

281021[0-9]{18}

PSP 21

24

28102200 ~ 28102299

N/A

281022[0-9]{18}

PSP 22

24

28102300 ~ 28102399

N/A

281023[0-9]{18}

PSP 23

24

28102400 ~ 28102499

N/A

281024[0-9]{18}

PSP 24

24

28102500 ~ 28102599

N/A

281025[0-9]{18}

PSP 25

24

28102600 ~ 28102699

N/A

281026[0-9]{18}

PSP 26

24

28166600 ~ 28166699

N/A

281666[0-9]{18}

PSP 27

24

28180100 ~ 28180199

N/A

281801[0-9]{18}

PSP 28

24

30103100 ~ 30103199

N/A

301031[0-9]{18}

PSP 29

24

30103200 ~ 30103299

N/A

301032[0-9]{18}

PSP 30

24

30103900 ~ 30103999

N/A

301039[0-9]{18}

PSP 31

获取发码方表

联系我们,以获取发码方表格的最新版本,或者申请将PSP已有的发码规则加入到发码方表格中

使用方法

收单机构或ISV在收到用户展示码的值之后,可以确定用户展示码的发码方。请遵循表中的参数顺序(用户展示码的长度、发码方ID和其他条件)逐一判断用户展示码片段示例如下所示:

copy
import java.util.List;

public class RoutingDemo {

    /**
     * Given a Routing Table, determine the Code Issuer for a specific Consumer-Presented Code.
     * The caller of this method must dertermine a transaction route according to the code issuer returned by this method.
     * 
     * @param code
     * @param routingTableItems
     * @return
     */
    public String getCodeIssuer(String code, List<String[]> routingTableItems) {
        
        
        for (String[] routingTableItem : routingTableItems) {
            
            //Return the first matching item if any.
            if (match(routingTableItem, code)) {
                String codeIssuer = routingTableItem[4];
                return codeIssuer;
            }
        }

        throw new IllegalArgumentException("No route matches against " + userCode);
    }


    /**
     * 
     * Whether a routing table item matches the given Consumer-Presented Code.
     * 
     * @param routingTableItem
     * @param code
     * @return
     */
    private boolean match(String[] routingTableItem, String code) {

        String regex = routingTableItem[3];

        return code.matches(regex);

    }

}

注:

发码方的确定过程建议进行参数化处理,以适配发码方表后续的更新

确定码方后,您可以选择一条路由转发交易给下一转发目标,最终交由发码方做后续处理。详情请参见用户展示码交易处理

申请发码方ID

如果您计划通过用户展示码发码以开展线下支付业务,请联系我们申请发码方ID。我们会把您登记到发码方表格,以便处理交易的机构能够根据发码方表格来识别码

如果已经发码并且与发码方表中的所有发码规则不冲突,也可以联系我们现有的发码规则注册到路由表。我们将告知您申请所需的信息,并回复申请结果。

更多信息

用户展示码标准

用户展示码格式

用户展示码交易处理

用户展示码示例

术语表

联系我们