NAV Navbar
java

概述

此文档描述了Dokypay现阶段所支持的接口与能力。

如后续Dokypay提供其他业务接口,会尽量保障兼容此文档接口中的目前调用方式的适用情况;如果不能兼容,正常情况会使用接口参数version字段进行处理。我们期望客户能跟我们最新的接口调用方式保持一致。如果给您带来不便,敬请谅解。

接入准备

在接入Dokypay API接口时,你需要了解并获取以下内容:

名词说明

名称 描述
商户号 商户在注册成为Dokypay后,Dokypay会分配给该商户在平台的唯一标识号。
商户密钥 使用订单查询、退款需要使用此参数用于签名。
应用号 商户可自行Dokypay通过商户平台创建多个应用,每个应用都会有唯一的应用ID(一般为10位数字),每个应用可独立发起支付请求。
应用秘钥 由Dokypay为每个应用生成应用秘钥(32位随机字符串),用于发起支付请求、代付请求时进行签名使用。见签名机制
签名值 在商户与Dokypay进行接口调用时,为了保证数据在网络传输过程中不被抓包篡改,Dokypay通过相应的逻辑规则,使用sha256的方式,对业务参数进行计算,可生成唯一的字符串,此字符串为签名值
pmId 功能Id,在调用支付\代付接口时,如果传入此字段,则可以直接请求上游,否则返回跳转到收银台页面的链接
extInfo 补充信息参数,如果在支付\代付接口调用时,对应的pmId,上游需要一些付款者的信息才能完成支付时,商户可通过此字段传入对应的补充信息,可跳过补充信息页面。否则Dokypay会返回跳转到补充信息页面的链接
请求地址 是指由Dokypay提供API服务的网关地址。
请求参数 是指商户系统调用Dokypay支付系统API时,发送至Dokypay系统时的参数。
返回参数 是指商户系统调用Dokypay支付系统API后,由Dokypay系统返回给商户的参数。
Dokypay API接口 是指Dokypay提供的可通过互联网通信技术,进行信息传递的接口,商户可根据调用方式进行调用。

调用方式

请求结构

通过向Dokypay API的服务端地址发送HTTP POST请求,并按照请求结构 在HTTP body中加入相应请求参数来完成,Dokypay系统根据请求参数 来响应返回参数 。

通信协议

为了更高的安全性,Dokypay API接口仅支持通过HTTPS通道进行请求通信。 在调用Dokypay系统API时, 需要遵循以下安全要求:

请求方法

基于HTTP协议,商户系统使用POST方式发送请求到Dokypay API接口。

字符编码

请求及返回结果都使用UTF-8字符集进行编码。

参数格式

请求参数及返回参数均使用JSON格式。

返回参数

字段 名称 说明
code 状态码 http状态码,此字段值只表明接口请求情况,不能说明业务参数无异常
msg 状态描述 接口调用结果描述
timestamp 当前时间串 当前的时间串
data 业务返回值 描述业务调用情况的返回值,具体请参照业务接口列表 中每个接口的data值

通知机制

通知分为两种通知方式,因同步回调可能出现用户模拟操作,或在同步通知未进行跳转时,用户手动关闭浏览器等不可控情况,导致商户造成损失,我们强烈建议商户以异步通知结果来确认订单的支付结果。

如,商户的同步通知地址为:

http://www.yoursite.com/dokypay/succ/orderno

则在支付成功时,Dokypay会将用户的浏览器跳转至(此处为方便观看,实际没有换行):

http://www.yoursite.com/dokypay/succ/orderno?amount=12.01&createTime=2019-01-09 14:53:05&currency=USD&merTransNo=mtn8888888888&processAmount=170181.70&processCurrency=IDR&sign=f99b64ecd3ce69c8683df713163cbf90b4bfd710a0d66eb95ab301dce9363215&tradeNo=201901091453055080016630&transStatus=success&updateTime=2019-01-09 14:54:00

实际跳转地址为(此处为方便观看,实际没有换行):

http://www.yoursite.com/dokypay/succ/orderno?amount=12.01&createTime=2019-01-09%2014:53:05&currency=USD&merTransNo=mtn8888888888&processAmount=170181.70&processCurrency=IDR&sign=f99b64ecd3ce69c8683df713163cbf90b4bfd710a0d66eb95ab301dce9363215&tradeNo=201901091453055080016630&transStatus=success&updateTime=2019-01-09%2014:54:00

在用户支付成功,或者取消支付时,Dokypay会将消费者的浏览器重定向到商户提供的returnurl上,并携带相关参数。

同步回调采用get方式跳转,相应的拼接参数,会对每个参数的值进行编码为UTF-8的URLencode处理,随后进行跳转。

Dokypay会将消费者支付结果的消息通过服务器端发送到商户提供的notifyurl上,并携带相关参数,以post形式提交。商户需要对结果信息进行签名验证,以防止伪造的通知信息;且必须对返回结果中的订单状态做判断,以确定订单状态。

签名机制

假设调用接口时,需要传递的参数如下:

{
    "amount": "10",
    "appId": "1001412384",
    "country": "IN",
    "currency": "INR",
    "extInfo": {
        "paymentTypes": "credit,debit,ewallet,upi"
    },
    "merTransNo": "dokypay-1576735973586",
    "notifyUrl": "http://yoursite.com/notifyurl",
    "prodName": "southeast.asia",
    "returnUrl": "http://yoursite.com/returnurl",
    "version": "1.1"
}

商户应用Key如下: bc2d5fc0c8d2442d86c9f4fd2d4a0b6b

则签名前拼接字符串为: amount=10&appId=1001412384&country=IN&currency=INR&extInfo=paymentTypes=credit,debit,ewallet,upi&merTransNo=dokypay-1576735973586&notifyUrl=http://yoursite.com/notifyurl&prodName=southeast.asia&returnUrl=http://yoursite.com/returnurl&version=1.1&key=bc2d5fc0c8d2442d86c9f4fd2d4a0b6b

获取的签名值为: ee2406f9713f9cc234a4e2bb176b1968c500455866e0509a86896264c38dbd20

对应的请求参数为:

{
    "amount": "10",
    "appId": "1001412384",
    "country": "IN",
    "currency": "INR",
    "extInfo": {
        "paymentTypes": "credit,debit,ewallet,upi"
    },
    "merTransNo": "dokypay-1576735973586",
    "notifyUrl": "http://yoursite.com/notifyurl",
    "prodName": "southeast.asia",
    "returnUrl": "http://yoursite.com/returnurl",
    "sign": "ee2406f9713f9cc234a4e2bb176b1968c500455866e0509a86896264c38dbd20",
    "version": "1.1"
}

在此提供java的生成签名字符串的方法供参考,方法形参中map为传递的业务参数的集合,appkey为应用秘钥。需要注意的是获取签名使用的是sha256算法。返回值需要对签名进行16进制转码获取到对应的字符串为签名值。

       public static String doEncrypt(Map<String, Object> map, String appkey) {
        Object[] keys = map.keySet().toArray();
        Arrays.sort(keys);
        StringBuilder originStr = new StringBuilder();
        for (Object key : keys) {
            Object value = map.get(key.toString());
            if (Objects.nonNull(value) && StringUtils.isNotBlank(value.toString())) {
                //sign不参与签名字符串的拼接
                if ("sign".equals(key.toString().trim())) {
                    continue;
                }
                if ("extInfo".equals(key)) {
                    value = parseExtInfo((Map) value);
                }
                originStr.append(key).append("=").append(value).append("&");
            }
        }
        originStr.append("key=").append(appkey);
        logger.info("签名信息,拼接后信息为:[" + originStr.toString() + "]");
        String sign = SecurityUtil.encryptSHA(originStr.toString());
        logger.info("获取到的签名信息为:[" + sign + "]");
        return sign;
    }

    public static String parseExtInfo(Map extInfo) {
        Object[] keys = extInfo.keySet().toArray();
        Arrays.sort(keys);
        StringBuilder extInfoValue = new StringBuilder();
        for (Object key : keys) {
            Object value = extInfo.get(key.toString());
            if (Objects.nonNull(value) && StringUtils.isNotBlank(value.toString())) {
                extInfoValue.append(key).append("=").append(value.toString()).append("&");
            }
        }
        return extInfoValue.substring(0, extInfoValue.length() - 1);
    }

    public static final String encryptSHA(String data) {
         try {
             //return org.apache.commons.codec.digest.DigestUtils.sha256Hex(data);
             return Hex.encodeHexString(SHACoder.encodeSHA256(data.getBytes("UTF-8")));
         } catch (Exception e) {
             throw new RuntimeException("加密错误,错误信息:", e);
         }
     }

商户在调用Dokypay API接口时,需将请求参数中的业务参数,按照Dokypay约定好的形式,获取到对应的签名字符串,并作为请求参数sign传递给Dokypay。

Dokypay进行返回参数组装时,也会按照此规则进行签名,并传递签名值。因不同的业务接口可能需要参与签名的字段不同,具体请参照业务接口列表中,各个接口的具体说明。

获取签名字符串:

请求参数json中的业务信息,按照key的Unicode进行排序。然后将参数以 key1=value1&key2=value2&key3=value3 的形式拼接,最后将商户key应用key(不同的接口,签名时使用的key可能不相同,具体接口有说明)拼接至字符串最后,key值为key。我们暂且称拼接好的字符串为originStr

originStr转化为UTF-8的byte数组后,使用sha256算法进行编码,再将编码后的数组转码为16进制的字符串。

伪代码如下:

Hex.encodeHexString(SHACoder.encodeSHA256(originStr.getBytes("UTF-8")));

举例说明

统一下单接口需要传递的请求参数:

{
    "amount": "10",
    "appId": "1001412384",
    "country": "IN",
    "currency": "INR",
    "extInfo": {
        "paymentTypes": "credit,debit,ewallet,upi"
    },
    "merTransNo": "dokypay-1576735973586",
    "notifyUrl": "http://yoursite.com/notifyurl",
    "prodName": "southeast.asia",
    "returnUrl": "http://yoursite.com/returnurl",
    "sign": "ee2406f9713f9cc234a4e2bb176b1968c500455866e0509a86896264c38dbd20",
    "version": "1.1"
}

对于以上需要传送的请求参数,Linux下可通过此方式进行请求(商户可通过不同的开发语言进行开发,后续会补上常用的开发语言的测试Demo):

curl -X POST --header 'Content-Type: application/json' --header 'Accept: text/html' -d '{ \
   "amount": "10", \
   "appId": "1001412384", \
   "country": "IN", \
   "currency": "INR", \
   "extInfo": {"paymentTypes": "credit,debit,ewallet,upi"},\
   "merTransNo": "dokypay-1576735973586", \
   "notifyUrl": "http://yoursite.com/notifyurl", \
   "prodName": "southeast.asia", \
   "returnUrl": "http://yoursite.com/returnurl", \
   "sign": "ee2406f9713f9cc234a4e2bb176b1968c500455866e0509a86896264c38dbd20" \
   "version": "1.1" \
 } \
 ' 'https://gatewaybeta.dokypay.com/clientapi/unifiedorder'

对于以上参数,Dokypay接口会返回内容为:

{
    "data": {
        "amount": "10",
        "currency": "INR",
        "doing": "redirect",
        "merTransNo": "dokypay-1576735973586",
        "message": "success",
        "resultCode": "0000",
        "sign": "e28a04a3bcb0dba92d8e7e8d9cfa0c4b6069430f313ae166cbe8b447c65e8f9a",
        "tradeNo": "20191219141556118010479493",
        "url": "https://gatewaybeta.dokypay.com/cashierdesk/allfacility/b2fda22f77d94373b6123b21a144272e"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576736156349"
}

业务接口列表

API方式支付接口

此接口允许商户通过后端服务器,向Dokypay发起支付请求。Dokypay会根据商户请求做出相应响应;并提示商户下步操作方式。

交易支付流程

版本号

1.1

请求地址

请求参数

{
    "amount": "10",
    "appId": "1001412384",
    "country": "IN",
    "currency": "INR",
    "extInfo": {
        "paymentTypes": "credit,debit,ewallet,upi"
    },
    "merTransNo": "dokypay-1576735973586",
    "notifyUrl": "http://yoursite.com/notifyurl",
    "prodName": "southeast.asia",
    "returnUrl": "http://yoursite.com/returnurl",
    "sign": "ee2406f9713f9cc234a4e2bb176b1968c500455866e0509a86896264c38dbd20",
    "version": "1.1"
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
version
接口版本
必填
当前版本1.1
amount
订单金额
必填1-9位,保留2位小数
订单金额请使用字符串方式表示
appId
应用号
必填10位
此字段在商户申请应用时,由Dokypay生成
country
国家代码
选填2位
ISO3166-2标准如使用此字段,且符合跳转Dokypay到收银台情况下,则优先显示此国家的常用支付列表,参见国家币种表
currency
金额币种
必填3位
国际统一币种简称,表示amount金额的币种,参照国家币种表
description
订单描述
选填1-80位
订单的标题,有些场景如果消费者看到订单信息,可能会展示此字段内容
goodsInfo
商品信息
选填1-1024位
商品信息详情,格式为:商品名称,商品单价,商品数量,商品总额。例:Item1,1000.00,2,2000.00;Item2,1500.00,2,3000.00
merTransNo
商户订单号
必填1-60位
商户自行生成的订单号,建议商户保证唯一性,Dokypay不做唯一性验证
payerEmail
购买者电子邮箱
选填1-80位
购买者电子邮箱地址,必须是有效的
payerMobile
购买者手机号
选填1-20位
购买者的手机号,必须是有效的
payerName
购买者姓名
选填1-80位
购买者完整姓名
prodName
产品名称
必填
此字段由Dokypay提供,具体请参照产品列表
pmId
支付功能编号
选填
此字段由Dokypay提供,具体请参照功能列表,如果传入此字段,可跳过Dokypay的收银台页面(类似于用户在收银台页面进行了支付方式的选择)。
notifyUrl
异步通知地址
必填1-150位
订单在支付成功时,Dokypay会通过后台调用此url通知商户,通知机制请参照通知机制
returnUrl
同步通知地址
选填1-150位
订单支付完毕时,如果上游支持同步跳转,Dokypay会将用户的页面跳转到此url上
userId
用户Id
选填1-64位
如使用此字段,Dokypay的同步/异步通知、订单查询接口将原样返回该字段值
merCustomize
商户自定义
选填1-255位
如使用此字段,Dokypay的同步/异步通知、订单查询接口将原样返回该字段值
extInfo
扩充参数信息
此参数为JSON格式,具体的参数列表需参考pmId对应的extInfo列表;大部分情况下,如果传入完整的extInfo字段值,可跳过用户需要填写的补充信息页面
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用应用秘钥来计算签名

data值

当业务处理成功时:

{
    "data": {
        "amount": "10",
        "currency": "INR",
        "doing": "redirect",
        "merTransNo": "dokypay-1576735973586",
        "message": "success",
        "resultCode": "0000",
        "sign": "e28a04a3bcb0dba92d8e7e8d9cfa0c4b6069430f313ae166cbe8b447c65e8f9a",
        "tradeNo": "20191219141556118010479493",
        "url": "https://gatewaybeta.dokypay.com/cashierdesk/allfacility/b2fda22f77d94373b6123b21a144272e"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576736156349"
}

当业务处理失败时:

{
    "msg": "OK",
    "code": "200",
    "data": {
        "message": "currency is required",
        "resultCode": "400"
    },
    "timestamp": "1576737442774"
}

当服务器响应失败时:

{
    "msg": "Internal Server Error",
    "code": "500",
    "timestamp": "1576737487259"
}

字段 说明
resultCode
统一下单码
统一下单码0000时,表明下单成功,具体业务码,请参照统一下单码表
message
下单码描述
下单码描述success时,表明下单成功,具体业务码,请参照统一下单码表
下单码描述success,或统一下单码0000时,才会出现以下内容
amount
订单金额
源订单金额
currency
订单币种
源订单币种
merchantNo
商户订单号
商户订单号
tradeNo
订单号
Dokypay的平台订单号
processAmount
交易处理金额
真实的订单处理额度,如amount为美元时,processAmount是真实支付时对应的人民币的价格
processCurrency
交易处理币种
消费者在真实付款时,使用的币种
doing
处理方式
请参照处理方式,根据处理方式,进行数据处理
url
处理地址
如果doingredirect,则商户可直接将消费者网页重定向到此地址上
sign
签名值
请参考签名机制;签名业务字段只取data中的字段数据作为业务参数

通知参数

通用参数如下:

字段 说明
tradeNo
交易流水ID
Dokypay平台交易流水号( 同支付接口返回的tradeNo )
merTransNo
商户订单号
商户生成的订单号
currency
币种
源订单的币种
amount
金额
源订单金额
processCurrency
处理币种
用户实际支付时使用的币种
processAmount
处理金额
用户实际支付金额
transStatus
订单状态
详见订单状态
createTime
创建时间
订单创建时间(GMT+8 时间)
updateTime
最后处理时间
最后处理时间 (GMT+8 时间)
payerName
付款人姓名
如果Dokypay能确定此参数时则返回
payerEmail
付款人邮箱
如果Dokypay能确定此参数时则返回
payerMobile
付款人电话
如果Dokypay能确定此参数时则返回
pmId
支付功能编号
如果Dokypay能确定此参数时则返回
paymentType
支付方式
如果Dokypay能确定此参数时则返回
paymentChannel
支付渠道
如果Dokypay能确定此参数时则返回
userId
用户Id
支付请求时,如使用此字段,Dokypay则返回
merCustomize
商户自定义
支付请求时,如使用此字段,Dokypay则返回
sign
签名
上述信息均参与签名,详见签名机制

API方式订单查询接口

此接口允许商户通过后端服务器,向Dokypay发起订单查询请求。Dokypay会根据商户请求返回对应的订单查询结果。

版本号

1.1

请求地址

请求参数

{
    "merchantId":"10000",
    "tradeNo":"20191219141556118010479493",
    "version":"1.1",
    "sign":"467905b59547fbcfc0208f8d38f0307518c7dcb93211e2f44ff355ff0caac77a"
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
version
接口版本
必填
当前版本为1.1
merchantId
商户ID
必填
此字段在商户完善信息后,由Dokypay生成
tradeNo
订单号
merTransNo二选一
Dokypay交易号
merTransNo
商户订单号
tradeNo二选一
商户订单号
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用商户秘钥来计算签名

data值

当业务处理成功时:

{
    "data": {
        "amount": "10.00",
        "createTime": "2019-12-19 14:15:56",
        "currency": "INR",
        "merTransNo": "dokypay-1576735973586",
        "message": "success",
        "processAmount": "10.00",
        "processCurrency": "INR",
        "resultCode": "0000",
        "sign": "c7b54f5219bf69df4581b1c0a5ca3626a97c2d450f4dae88b6aaf187f81232af",
        "tradeNo": "20191219141556118010479493",
        "tradeStatus": "pending",
        "updateTime": "2019-12-19 14:47:07"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576738027034"
}

当业务处理失败时:

{
    "data": {
        "message": "sign error",
        "resultCode": "2002"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576738339941"
}

当服务器响应失败时:

{
    "msg": "Internal Server Error",
    "code": "500",
    "timestamp": "1576737487259"
}
字段 说明
resultCode
统一下单码
当值为0000时,表明查询业务成功,非0000时,不能表明订单的状态为失败
message
下单码描述
当值为success时,表明查询业务成功
下单码描述success,或统一下单码0000时,才会出现以下内容
merTransNo
商户订单号
商户发起支付时的订单号
tradeNo
Dokypay订单号
商户发起支付时Dokypay生成的订单号
amount
支付金额
支付金额
currency
币种
币种
processCurrency
交易处理币种
用户实际支付时使用的币种
processAmount
交易处理金额
用户实际支付金额
tradeStatus
交易状态
交易状态,与支付接口通知机制返回订单状态相同,详见订单状态
pmId
支付功能编号
如果Dokypay能确定此参数时则返回
paymentType
支付方式
如果Dokypay能确定此参数时则返回
paymentChannel
支付渠道
如果Dokypay能确定此参数时则返回
userId
用户Id
支付请求时,如使用此字段,Dokypay则返回
merCustomize
商户自定义
支付请求时,如使用此字段,Dokypay则返回
createTime
订单创建时间
YYYY-MM-dd HH:mm:ss
updateTime
最后处理时间
YYYY-MM-dd HH:mm:ss
tradeCount
订单个数
如果查询时传入merTransNo,当查询到订单笔数大于1时,则此字段会显示查询出的订单笔数;只有一笔时此字段不返回
sign
签名值
请参考签名机制;签名业务字段只取data中的字段数据作为业务参数

API方式退款接口

版本号

2.0

请求地址

请求参数

{
    "amount": "2",
    "tradeNo": "20191219150101144010478169",
    "merchantId": "10000",
    "merRefundNo":"dokypay-1576738678957",
    "notifyUrl": "http://yoursite.com/notifyurl",
    "currency": "USD",
    "version": "2.0",
    "sign": "f1bb9507686859fff9b0b0f1fe0931a762e1a97b534e1c8f548a82cfdecc34bd"
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
version
接口版本
必填
当前版本2.0
merchantId
商户ID
必填
此字段在商户完善信息后,由Dokypay生成
tradeNo
订单号
必填
Dokypay交易号
merRefundNo
商户退款订单号
必填
商户退款订单号
amount
订单金额
必填1-9位,保留2位小数
订单金额请使用字符串方式表示
notifyUrl
异步通知地址
必填1-150位
退款成功时,Dokypay会通过后台调用此url通知商户,通知机制请参照通知机制
currency
币种
必填3位
国际统一币种简称,表示amount金额的币种,参照国家币种表
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用商户秘钥来计算签名

data值

当业务处理成功时:

{
    "data": {
        "amount": "2.00",
        "createTime": "2019-12-19 15:07:06",
        "currency": "USD",
        "merRefundNo": "dokypay-1576738678957",
        "message": "success",
        "processAmount": "2.00",
        "processCurrency": "USD",
        "refundNo": "191219150706288010317355",
        "resultCode": "0000",
        "sign": "0e7fb76499b87d3180205fda6a9522ede585ea1c16892f82fcc201b43f67bb2f",
        "status": "success",
        "updateTime": "2019-12-19 15:07:06"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576739227788"
}

当业务处理失败时:

{
    "data": {
        "message": "merRefundNo is required",
        "resultCode": "3018"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576739184034"
}

当服务器响应失败时:

{
    "msg": "Internal Server Error",
    "code": "500",
    "timestamp": "1576737487259"
}

字段 说明
resultCode
统一下单码
统一下单码0000时,表明下单成功,具体业务码,请参照统一下单码表
message
下单码描述
下单码描述success时,表明下单成功,具体业务码,请参照统一下单码表
下单码描述success,或统一下单码0000时,才会出现以下内容
amount
支付金额
支付金额
currency
币种
币种
processCurrency
交易处理币种
用户实际支付时使用的币种
refundNo
退款订单号
Dokypay生成的退款订单号
merRefundNo
商户退款订单号
商户退款时所传商户退款订单号,不传则不返回
processAmount
交易处理金额
用户实际支付金额
status
退款状态
交易状态,与支付接口通知机制返回订单状态相同,详见订单状态
createTime
订单创建时间
YYYY-MM-dd HH:mm:ss
updateTime
最后处理时间
YYYY-MM-dd HH:mm:ss
sign
签名值
请参考签名机制;签名业务字段只取data中的字段数据作为业务参数

API方式退款查询接口

版本号

1.1

请求地址

请求参数

{
    "merchantId": "10000",
    "refundNo": "191219150706288010317355",
    "merRefundNo": "dokypay-1576738678957",
    "version": "1.1",
    "sign": "cf9c6bbc35442f047d9e0043b28b17bf45721dea10274c2901b4300fa3fdea9a"
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
version
接口版本
必填
当前版本为1.1
merchantId
商户ID
必填
此字段在商户完善信息后,由Dokypay生成
refundNo
退款订单号
merRefundNo二选一
Dokypay退款订单号
merRefundNo
商户退款订单号
refundNo二选一
商户退款订单号
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用商户秘钥来计算签名

data值

当业务处理成功时:

{
    "data": {
        "amount": "2.00",
        "createTime": "2019-12-19 15:07:06",
        "currency": "USD",
        "merRefundNo": "dokypay-1576738678957",
        "message": "success",
        "processAmount": "2.00",
        "processCurrency": "USD",
        "refundNo": "191219150706288010317355",
        "resultCode": "0000",
        "sign": "7dfd033ecb8442d6f44c962b1e975bf419075677ac1814a373c39050e8ea08b8",
        "status": "success",
        "updateTime": "2019-12-19 15:07:08"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576739641356"
}

当业务处理失败时:

{
    "data": {
        "message": "Refund Not Found !",
        "resultCode": "3006"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576739742091"
}

当服务器响应失败时:

{
    "msg": "Internal Server Error",
    "code": "500",
    "timestamp": "1576737487259"
}

字段 说明
resultCode
统一下单码
当值为0000时,表明查询业务成功,但不能表明退款状态为成功,且值不为0000时,不能理解为退款失败。
message
下单码描述
当值为success时,表明查询业务成功
下单码描述success,或统一下单码0000时,才会出现以下内容
amount
支付金额
支付金额
currency
币种
币种
processCurrency
交易处理币种
用户实际支付时使用的币种
refundNo
退款订单号
Dokypay生成的退款订单号
merRefundNo
商户退款订单号
商户退款时所传商户退款订单号,不传则不返回
processAmount
交易处理金额
用户实际支付金额
status
退款状态
交易状态,与支付接口通知机制返回订单状态相同,详见订单状态
createTime
订单创建时间
YYYY-MM-dd HH:mm:ss
updateTime
最后处理时间
YYYY-MM-dd HH:mm:ss
sign
签名值
请参考签名机制;签名业务字段只取data中的字段数据作为业务参数

API方式退款记录查询接口

版本号

1.1

请求地址

请求参数

{
    "merchantId":"10000",
    "merTransNo":"dokypay-1576739781023",
    "tradeNo":"20191219151923508010471598",
    "sign": "7677247baca845db03c2e127ac969a79c7ce4e02110b8bcfc1106f30d1f7cd00",
    "version": "1.1"
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
version
接口版本
必填
当前版本为1.1
merchantId
商户ID
必填
此字段在商户完善信息后,由Dokypay生成
tradeNo
订单号
merTransNo二选一
Dokypay交易号
merTransNo
商户订单号
tradeNo二选一
商户订单号
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用商户秘钥来计算签名

data值

当业务处理成功时:

{
    "data": {
        "message": "success",
        "refundOrderList": [
            {
                "amount": "2.00",
                "createTime": "2019-12-19 15:20:41",
                "currency": "USD",
                "merRefundNo": "dokypay-1576739781023",
                "processAmount": "2.00",
                "processCurrency": "USD",
                "refundNo": "191219152041319010312826",
                "status": "success",
                "updateTime": "2019-12-19 15:20:43"
            },
            {
                "amount": "4.00",
                "createTime": "2019-12-19 15:28:25",
                "currency": "USD",
                "merRefundNo": "dokypay-1576740323006",
                "processAmount": "4.00",
                "processCurrency": "USD",
                "refundNo": "191219152825454010316657",
                "status": "success",
                "updateTime": "2019-12-19 15:28:27"
            }
        ],
        "resultCode": "0000"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576740777754"
}

当业务处理失败时:

{
    "data": {
        "message": "Sign Error !",
        "resultCode": "2002"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576740837657"
}

当服务器响应失败时:

{
    "msg": "Internal Server Error",
    "code": "500",
    "timestamp": "1576737487259"
}

字段 说明
resultCode
统一下单码
当值为0000时,表明查询业务成功,但不能表明退款状态为成功,且值不为0000时,不能理解为退款失败。
message
下单码描述
当值为success时,表明查询业务成功
下单码描述success,或统一下单码0000时,才会出现以下内容
refundOrderList
退款记录
退款记录详情,此参数为JSON格式
refundOrderList
amount
支付金额
支付金额
currency
币种
币种
processCurrency
交易处理币种
用户实际支付时使用的币种
refundNo
退款订单号
Dokypay生成的退款订单号
merRefundNo
商户退款订单号
商户退款时所传商户退款订单号,不传则不返回
processAmount
交易处理金额
用户实际支付金额
status
退款状态
交易状态,与支付接口通知机制返回订单状态相同,详见订单状态
createTime
订单创建时间
YYYY-MM-dd HH:mm:ss
updateTime
最后处理时间
YYYY-MM-dd HH:mm:ss

API方式代付接口

此接口允许商户通过后端服务器,向Dokypay发起代付请求。

版本号

1.1

请求地址

请求参数

{
    "amount": "10000",
    "appId": "1000000000",
    "currency": "IDR",
    "merTransNo": "dokypay-1576742093462",
    "notifyUrl": "https://reply.dokypay.com/notify",
    "pmId": "payout.bank.id",
    "prodName": "southeast.asia.payout",
    "version": "1.1",
    "sign": "c6bc0348acc447a9d55fc4eb5100e3c49a998ec958c11b062e4040d85958cff5",
    "extInfo": {
        "bankCode": "CENAIDJA",
        "payeeMobile": "6280880808",
        "payeeEmail": "abc@163.com",
        "accountNumber": "8288288282",
        "accountHolderName": "ABC"
    }
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
amount
代付订单金额
必填1-9位,保留2位小数
代付订单金额请使用字符串方式表示
appId
应用号
必填10位
此字段在商户申请应用时,由Dokypay生成
currency
金额币种
必填3位
国际统一币种简称,表示amount金额的币种,参照国家币种表
description
订单描述
选填1-80位
订单的标题,有些场景如果消费者看到订单信息,可能会展示此字段内容
merTransNo
商户代付订单号
必填1-60位
商户自行生成的代付订单号,建议商户保证唯一性,Dokypay不做唯一性验证
notifyUrl
代付异步通知地址
必填1-150位
代付成功时,Dokypay会通过后台调用此url通知商户,通知机制请参照通知机制
pmId
代付功能编号
必填
此字段由Dokypay提供,具体请参照代付功能列表
prodName
代付产品名称
必填
此字段由Dokypay提供,具体请参照产品列表
version
接口版本
必填
当前版本 1.1
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用应用秘钥来计算签名
extInfo
扩充参数信息
此参数为JSON格式,具体的参数列表需参考pmId对应的extInfo列表

data值

当业务处理成功时:


    "data": {
        "amount": "10000",
        "currency": "IDR",
        "merTransNo": "dokypay-1576742093462",
        "message": "success",
        "resultCode": "0000",
        "sign": "e1618758a8eeccefa001e8694ba07355546f73b78a740a0c146c9d8ef4881487",
        "tradeNo": "20191219155755942010474021"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576742276065"
}

当业务处理失败时:

{
    "msg": "OK",
    "code": "200",
    "data": {
        "message": "sign error",
        "resultCode": "2002"
    },
    "timestamp": "1576741296325"
}

当服务器响应失败时:

{
    "msg": "Internal Server Error",
    "code": "500",
    "timestamp": "1576737487259"
}

字段 说明
resultCode
统一下单码
统一下单码0000时,表明下单成功,具体业务码,请参照统一下单码表
message
下单码描述
下单码描述success时,表明下单成功,具体业务码,请参照统一下单码表
下单码描述success,或统一下单码0000时,才会出现以下内容
amount
代付订单金额
代付订单金额
currency
代付币种
发起代付请求币种
merTransNo
商户代付订单号
商户代付订单号
tradeNo
订单号
Dokypay的平台订单号
sign
签名值
请参考签名机制;签名业务字段只取data中的字段数据作为业务参数

通知参数

API方式代付接口仅有异步通知,通知机制见通知机制,具体参数如下:

字段 说明
resultCode
代付失败错误码
当tradeStatus值为failure时,此字段会返回,并且参与通知签名
message
代付失败错误信息
当tradeStatus值为failure时,此字段会返回,并且参与通知签名
tradeNo
交易流水ID
Dokypay平台交易流水号
merTransNo
商户订单号
商户生成的订单号
currency
币种
源订单的币种
amount
金额
源订单金额
totalFee
手续费
代付手续费
pmId
代付功能编号
如果Dokypay能确定此参数时则返回
tradeStatus
订单状态
详见订单状态
createTime
创建时间
订单创建时间(GMT+8 时间)
updateTime
最后处理时间
最后处理时间 (GMT+8 时间)
sign
签名
上述信息均参与签名,详见签名机制

API账户查询接口

版本号

1.1

请求地址

请求参数

{
    "merchantId": "10000",
    "accType": "payment",
    "version": "1.1",
    "sign": "fa1824c230b00a6407a7b2af53e7307fe2c46727f8e2f4ae0227dd964965bcb5"
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
merchantId
商户ID
必填
此字段在商户完善信息后,由Dokypay生成
currency
账户币种
选填3位
国际统一币种简称,参照国家币种表
accType
账户类型
选填
账户类型 payment、payout
version
接口版本
必填
当前版本为1.1
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用商户秘钥来计算签名

data值

当业务处理成功时:

{
    "data": {
        "accounts": [
            {
                "accId": "10000",
                "accType": "payment",
                "balance": "996259.000000",
                "currency": "USD",
                "frozenAmount": "0.000000",
                "merchantId": "10000",
                "status": "actived"
            },
            {
                "accId": "10028",
                "accType": "payment",
                "balance": "28366.000000",
                "currency": "CNY",
                "frozenAmount": "0.000000",
                "merchantId": "10000",
                "status": "actived"
            },
            {
                "accId": "10039",
                "accType": "payment",
                "balance": "161633550.000000",
                "currency": "IDR",
                "frozenAmount": "0.000000",
                "merchantId": "10000",
                "status": "actived"
            },
            {
                "accId": "10041",
                "accType": "payment",
                "balance": "0.000000",
                "currency": "INR",
                "frozenAmount": "0.000000",
                "merchantId": "10000",
                "status": "actived"
            },
            {
                "accId": "10065",
                "accType": "payment",
                "balance": "0.000000",
                "currency": "SGD",
                "frozenAmount": "0.000000",
                "merchantId": "10000",
                "status": "actived"
            },
            {
                "accId": "10070",
                "accType": "payment",
                "balance": "26777382.000000",
                "currency": "VND",
                "frozenAmount": "0.000000",
                "merchantId": "10000",
                "status": "actived"
            }
        ],
        "merchantId": "10000",
        "message": "success",
        "resultCode": "0000"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576741366106"
}

当业务处理失败时:

{
    "data": {
        "message": "accType is incorrect",
        "resultCode": "1001"
    },
    "code": "200",
    "msg": "OK",
    "timestamp": "1576741475422"
}

当服务器响应失败时:

{
    "msg": "Internal Server Error",
    "code": "500",
    "timestamp": "1576737487259"
}

字段 说明
resultCode
响应码
查询响应码
message
响应信息
查询响应信息
响应码0000时,或响应信息success,才会出现以下内容
merchantId
商户ID
此字段在商户完善信息后,由Dokypay生成
accounts
账户列表
商户的账户列表
accouts 账户列表字段
accId
账户ID
商户的账户ID
accType
账户类型
账户类型:payment 、payout
balance
账户余额
账户余额
currency
账户币种
账户币种
frozenAmount
账户冻结金额
账户冻结金额
merchantId
商户ID
此字段在商户完善信息后,由Dokypay生成
status
账户状态
账户状态:pending 、actived、closed

API方式订阅创建接口

版本号

1.1

请求地址

请求参数

字段 说明
appId
应用号
必填10位
此字段在商户申请应用时,由Dokypay生成
version
接口版本
必填
当前版本 1.1
amount
订单金额
必填1-9位,保留2位小数
当前订阅的交易金额,最小值为:1
currency
金额币种
必填3位
国际统一币种简称,表示此次请求中所有涉及金额的币种amount,subsFixAmount,subsMaxAmount,参照国家币种表
后续续订金额所使用汇率与订阅时汇率一样,后续不再使用实时汇率
description
描述
选填1-80位
订单的标题,有些场景如果消费者看到订单信息,可能会展示此字段内容
merTransNo
商户订阅订单号
必填1-60位
商户自行生成的订阅订单号,建议商户保证唯一性,Dokypay不做唯一性验证
payerEmail
购买者电子邮箱
选填1-80位
购买者电子邮箱地址,必须是有效的
payerMobile
购买者手机号
选填1-20位
购买者的手机号,必须是有效的
payerName
购买者姓名
选填1-80位
购买者完整姓名
notifyUrl
异步通知地址
必填1-150位
订阅成功时,Dokypay会通过后台调用此url通知商户,通知机制请参照通知机制
returnUrl
同步通知地址
选填1-150位
订单支付完毕时,如果上游支持同步跳转,Dokypay会将用户的页面跳转到此url上
pmId
功能编号
必填
此字段由Dokypay提供,具体请参照功能列表
prodName
产品名称
必填
此字段由Dokypay提供,具体请参照产品列表
subsAmountType
续订金额类型
必填
续订金额可以固定或上限为最大金额。
此属性的值为:
fix:所有续订交易中收取的金额将与subsFixAmount相同
variable:续订金额可以变量并由subsMaxAmount限制
subsFixAmount
续订固定金额
续订的固定金额
subsAutomateRenew
自动续订
条件字段
Dokypay是否自动进行续订操作,只有subsAmountTypefix时才有效。
true:续订周期自动续费
false:不自动续费,需商户主动发起续订操作
subsRenewNotifyUrl
续订通知URL
条件必填
subsAutomateRenewtrue时,Dokypay进行自动续订操作,成功或者失败时,都会通知到此Url。
条件必填:如果在此请求中发送了subsAutomateRenewtrue时。
subsMaxAmount
续订金额上限
续订金额上限,目前暂时无限制
必填控制:如果在此请求中subsAmountTypevariable
subsFrequencyUnit
续订频率单位
必填
此属性支持的值当前为:day
subsFrequency
续订频率
必填
结合subsFrequencyUnit,此变量定义频率。
如果续订周期为2个月,单位为day, 则为60
subsStartDate
续订开始时间
可选
这是续订开始的日期,即可以向客户收取第一次续订费用的时间。
日期格式为YYYY-MM-DD
subsExpiryDate
续订有效时间
必填
订阅的有效期终止时间
日期格式为YYYY-MM-DD
subsGraceDays
续订延后天数
条件必填
0-20
商家可以发送续订请求的续订周期开始日期之后的天数。
条件必填:如果在此请求中发送了subsStartDate
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用应用秘钥来计算签名
extInfo
扩充参数信息
此参数为JSON格式,具体的参数列表需参考pmId对应的extInfo列表

data值

字段 说明
resultCode
统一下单码
统一下单码0000时,表明下单成功,具体业务码,请参照统一下单码表
message
下单码描述
下单码描述success时,表明下单成功,具体业务码,请参照统一下单码表
下单码描述success,或统一下单码0000时,才会出现以下内容
amount
订单金额
源订单金额
currency
订单币种
源订单币种
merchantNo
商户订单号
商户订单号
tradeNo
订单号
Dokypay的平台订单号
subscribeId
订阅ID
后续的续订操作;或续订通知都会使用此字段关联
processAmount
交易处理金额
真实的订单处理额度,如amount为美元时,processAmount是真实支付时对应的人民币的价格,此处的金额只是此笔订阅的交易金额
processCurrency
交易处理币种
消费者在真实付款时,使用的币种
doing
处理方式
请参照处理方式,根据处理方式,进行数据处理
url
处理地址
如果doingredirect,则商户可直接将消费者网页重定向到此地址上
sign
签名值
请参考签名机制;签名业务字段只取data中的字段数据作为业务参数

通知参数

API方式订阅接口异步通知,通知机制见通知机制,具体参数如下:

字段 说明
tradeNo
交易流水ID
Dokypay平台交易流水号( 同支付接口返回的tradeNo )
merTransNo
商户订单号
商户生成的订单号
currency
币种
源订单的币种
amount
金额
源订单金额
processCurrency
处理币种
用户实际支付时使用的币种
processAmount
处理金额
用户实际支付金额
transStatus
订单状态
详见订单状态
pmId
功能编号
如果Dokypay能确定此参数时则返回
paymentType
支付方式
如果Dokypay能确定此参数时则返回
paymentChannel
支付渠道
如果Dokypay能确定此参数时则返回
createTime
创建时间
订单创建时间(GMT+8 时间)
updateTime
最后处理时间
最后处理时间 (GMT+8 时间)
subscribeId
订阅ID
后续的续订操作;或续订通知都会使用此字段关联
sign
签名
上述信息均参与签名,详见签名机制

自动续订通知参数

API方式自动续订异步通知,通知机制见通知机制,具体参数如下:

字段 说明
tradeNo
交易流水ID
Dokypay平台续订交易流水号
merTransNo
商户订单号
商户生成的订单号
此处由Dokypay生成,商户需根据此字段判断业务逻辑的唯一性
currency
币种
源订单的币种
amount
金额
源订单金额
processCurrency
处理币种
用户实际支付时使用的币种
processAmount
处理金额
用户实际支付金额
transStatus
订单状态
详见订单状态
pmId
功能编号
如果Dokypay能确定此参数时则返回
paymentType
支付方式
如果Dokypay能确定此参数时则返回
paymentChannel
支付渠道
如果Dokypay能确定此参数时则返回
createTime
创建时间
订单创建时间(GMT+8 时间)
updateTime
最后处理时间
最后处理时间 (GMT+8 时间)
subscribeId
订阅ID
后续的续订操作;或续订通知都会使用此字段关联
sign
签名
上述信息均参与签名,详见签名机制

API方式订阅续订接口

版本号

1.1

请求地址

请求参数

字段 说明
version
接口版本
必填
当前版本为1.1
amount
订单金额
必填1-9位,保留2位小数
订单金额请使用字符串方式表示
appId
应用号
必填10位
此字段在商户申请应用时,由Dokypay生成
currency
金额币种
必填3位
国际统一币种简称,表示amount金额的币种,参照国家币种表
description
订单描述
选填1-80位
订单的标题,有些场景如果消费者看到订单信息,可能会展示此字段内容
merTransNo
商户订单号
必填1-60位
商户自行生成的订单号,建议商户保证唯一性,Dokypay不做唯一性验证
prodName
产品名称
必填
此字段由Dokypay提供,具体请参照产品列表
pmId
支付功能编号
必填
此字段由Dokypay提供,具体请参照功能列表
notifyUrl
异步通知地址
必填1-150位
订单在有确定的支付结果时,Dokypay会通过后台调用此url通知商户,通知机制请参照通知机制
subscribeId
订阅ID
必填
创建订阅时,通过异步通知参数返回的subscribeId
extInfo
扩充参数信息
此参数为JSON格式,具体的参数列表需参考pmId对应的extInfo列表;大部分情况下,如果传入完整的extInfo字段值,可跳过用户需要填写的补充信息页面
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用应用秘钥来计算签名

data值

字段 说明
resultCode
统一下单码
统一下单码0000时,表明下单成功,具体业务码,请参照统一下单码表
message
下单码描述
下单码描述success时,表明下单成功,具体业务码,请参照统一下单码表
下单码描述success,或统一下单码0000时,才会出现以下内容
amount
订单金额
源订单金额
currency
订单币种
源订单币种
merchantNo
商户订单号
商户订单号
tradeNo
订单号
Dokypay的平台订单号
processAmount
交易处理金额
真实的订单处理额度,如amount为美元时,processAmount是真实支付时对应的人民币的价格,此处的金额只是此笔订阅的交易金额
processCurrency
交易处理币种
消费者在真实付款时,使用的币种
sign
签名值
请参考签名机制;签名业务字段只取data中的字段数据作为业务参数

通知参数

API方式订阅接口异步通知,通知机制见通知机制,具体参数如下:

字段 说明
tradeNo
交易流水ID
Dokypay平台交易流水号( 同支付接口返回的tradeNo )
merTransNo
商户订单号
商户生成的订单号
currency
币种
源订单的币种
amount
金额
源订单金额
processCurrency
处理币种
用户实际支付时使用的币种
processAmount
处理金额
用户实际支付金额
transStatus
订单状态
详见订单状态
pmId
功能编号
如果Dokypay能确定此参数时则返回
paymentType
支付方式
如果Dokypay能确定此参数时则返回
paymentChannel
支付渠道
如果Dokypay能确定此参数时则返回
createTime
创建时间
订单创建时间(GMT+8 时间)
updateTime
最后处理时间
最后处理时间 (GMT+8 时间)
subscribeId
订阅ID
后续的续订操作;或续订通知都会使用此字段关联
sign
签名
上述信息均参与签名,详见签名机制

API方式订阅退订接口

版本号

1.1

请求地址

请求参数

字段 说明
version
接口版本
必填
当前版本为1.1
merchantId
商户ID
必填
此字段在商户完善信息后,由Dokypay生成
subscribeId
订阅ID
必填
创建订阅时,通过异步通知参数返回的subscribeId
description
描述
选填1-80位
进行退订的信息描述
extInfo
扩充参数信息
后续可能扩展字段做准备
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用商户密钥来计算签名

data值

字段 说明
resultCode
统一下单码
统一下单码0000时,表明下单成功,具体业务码,请参照统一下单码表
message
下单码描述
下单码描述success时,表明下单成功,具体业务码,请参照统一下单码表
下单码描述success,或统一下单码0000时,才会出现以下内容
subscribeId
订阅ID
退订成功的订阅ID
sign
签名值
请参考签名机制;签名业务字段只取data中的字段数据作为业务参数

API方式商户结算文件接口

版本号

1.0

请求地址

请求参数


{
    "clearDate": "2020-01-06",
    "merchantId": "10000",
    "sign": "b522341dfd5178652c76f8df65686847868245bd28da796c3119827cc7400977",
    "version": "1.0"
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
version
接口版本
必填
当前版本1.0
merchantId
商户ID
必填
此字段在商户完善信息后,由Dokypay生成
clearDate
清算日期
必填
商户订单清算日期 yyyy-MM-dd
sign
签名
必填
根据其他参数,按照签名机制,计算此字段值,此处使用商户秘钥来计算签名

响应参数

字段 说明
resultCode
统一下单码
统一下单码0000时,表明下单成功,具体业务码,请参照统一下单码表
message
下单码描述
下单码描述success时,表明下单成功,具体业务码,请参照统一下单码表
下单码描述success,或统一下单码0000时,才会出现以下内容
status
状态
结算文件状态:processing(处理中),notfound(未找到)
字段 说明
Trade No
dokypay订单号
dokypay订单号
Merchant No
商户订单号
商户订单号
Trade Date
交易日期
交易日期
Settlement Date
结算日期
结算日期
Application
应用名称
应用名称
Payment Method
支付方式
支付方式
Trade Amount
订单金额
订单金额
Trade Currency
订单币种
订单币种
Commission
手续费
手续费
Commission Currency
续费币种
续费币种
Settlement Amount
结算金额
结算金额
Settlement Currency
结算币种
结算币种
Refund No
退款订单号
退款订单号(refund.csv包含)
Merchant Refund No
商户退款订单号
商户退款订单号(refund.csv包含)
Refund Amount
结算币种退款金额
退款金额(refund.csv包含)
Subscribe Id
订阅号
订阅号(subscribeCreate.csv包含)

API越南账户二要素接口

版本号

1.0

请求地址

请求参数

{    
"appId":"1000000000", 
"merTransNo":"12345678",
"prodName":"inquiry.service",
"pmId":"vietnam.bankAccountRisk",
"accountNumber":"4221510214590000",
"standBankCode":"EACBVNVX",
"accType":"CARD",
"version":"1.0",
"sign":"9b491b2f8cd1d08a971c650faa339825d64a523f8520c4ef6b26f4eb8f55149b"
}

下列参数中,要求的填写位数为字符的长度。

字段 说明
appId应用ID必填 此字段在商户申请应用时,由dokypay生成
merTransNo商户订单号必填 商户自行生成的订单号,建议商户保证唯一性,dokypay不做唯一性验证
prodName产品名称必填 此字段由dokypay提供,与示例参数相同
pmId支付功能编号必填 此字段由dokypay提供,与示例参数相同
accountNumber账户号必填 要查询的银行/账户号
standBankCode银行代码必填> 银行代码,越南银行代码
accType类型选填 accountNumber的类型,枚举 ACC/CARD(账户/卡)默认为账户
version接口版本必填 默认为最新的版本,当前版本为1.0
sign签名必填 根据其他参数,按照签名机制,计算此字段值,此处使用应用秘钥来计算签名

data值

当业务处理成功时:

{
"data":{
"version":"1.0",
"merchantId":"101111",
"merTransNo":"mtn1546939642550",
"accountNumber ":"54207384103",
"accountHolderName":"NGUYEN VAN A",
"sign":"afbca596d68a43d507d119d90572034fb6da37c7ec4f15ccdf182a5c6c9502b2",
"resultCode":"0000",
"message":"success",
},
"code":"200",
"msg":"OK",
"timestamp":"1561012888662"
}

当业务处理失败时:

{
"data":{
"message":"merchant account not found",
"resultCode":"3010"
},
"code":"200",
"msg":"OK",
"timestamp":"1561013744379"
}

当服务器响应失败时:

{
"code":"500",
"msg":"Internal Server Error",
"timestamp":"1561013794379"
}
字段 说明
version版本号
merchantId商户ID 此字段在商户完善信息后,由dokypay生成
merTransNo商户订单号 商户自行生成的订单号,建议商户保证唯一性,dokypay不做唯一性验证
accountNumber账户号 商户传入的账户号
accountHolderName持卡/账户人姓名 持卡人/账户姓名,如果未找到则返回“W/O”
sign签名 上述信息均参与签名,详见签名机制
resultCode响应码
message响应信息

参数列表

产品列表

产品代码 产品名称
southeast.asia 东南亚支付产品
southeast.asia.payout 东南亚代付产品
subscribe 订阅产品

功能列表

extInfo列表

intcreditcard国际信用卡支付

补充参数

字段 说明
cardNumber
信用卡卡号
1-50位
信用卡卡号
firstName
姓名
姓名前拼
lastName
姓名
姓名后拼
expireDate
信用卡有效期
信用卡有效期
cvv
cvv
信用卡背面后三位
payerEmail
持卡人邮箱
持卡人邮箱

wxapp微信APP支付

补充参数

字段 说明
expirationSecond
有效时长「秒」
60-2*60*60*30
默认15*60
虚拟支付码可以使用的有效期,单位为秒,最大支持2小时,默认为15分钟。如果需要设置不同的默认值,可联系运营进行设置。因上游接口原因,目前只支持15分钟。如果后续支持上面说明,请咨询运营

补充返回参数

字段 说明
appid
应用ID
微信开放平台审核通过的应用APPID
partnerid
商户号
微信支付分配的商户号
prepayid
预支付交易会话ID
微信返回的支付交易会话ID
package
扩展参数
暂填写固定值Sign=WXPay
noncestr
随机字符串
随机字符串,不长于32位。
timestamp
时间戳
时间戳
wxSign
签名
微信签名;同微信参数sign

payout.bank.id印尼银行卡代付

字段 说明
bankCode
银行代码
银行代码,印尼银行代码
accountHolderName
持卡人姓名
持卡人姓名
accountNumber
银行卡号
银行卡号
payeeEmail
收款人邮箱
收款人邮箱
payeeMobile
收款人电话
收款人的电话
confirmUrl
确认地址
可选
参数不为空时,Dokypay会通过后台调用此url的商户进行确认,是否进行代付,请参照确认机制

payout.bank.in印度银行卡代付

字段 说明
bankCode
银行IFSC代码
银行IFSC代码
accountHolderName
持卡人姓名
持卡人姓名
accountNumber
银行卡号
银行卡号
payeeEmail
收款人邮箱
收款人邮箱
payeeMobile
收款人电话
收款人的电话

doku.wallet.payoutDoku钱包代付

字段 说明
walletId
电子钱包Id
Doku电子钱包ID

paytm.wallet.payoutPaytm钱包代付

字段 说明
payeeEmail
收款人邮箱
收款人邮箱
注:payeeEmail、payeeMobile 两项不能都为空,可传其中一项)
payeeMobile
收款人电话
收款人的电话
注:payeeEmail、payeeMobile 两项不能都为空,可传其中一项)

gopay印尼gopay钱包支付

字段 说明
deepLink
重定向地址
重定向到GO-JEK应用程序
qrcode
二维码地址
用于手机扫描图片完成支付

banktransfer.id印尼携带还款指引的银行非静态VA

补充参数

字段 说明
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。如果需要设置不同的默认值,可联系运营进行设置。
payerEmail
付款人邮箱
必填1-80位
付款人邮箱;支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
payerName
付款人姓名
必填1-80位
付款人姓名;支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
payerMobile
付款人电话
必填1-20位
付款人电话:支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。

补充返回参数

字段 说明
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。如果需要设置不同的默认值,可联系运营进行设置。
paymentCode 用于付款的付款码
vaHolder 发码机构
guideUrl 还款指引url
guideCode 机构代码

fix.banktransfer.id印尼携带还款指引的银行静态VA

补充参数

字段 说明
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。如果需要设置不同的默认值,可联系运营进行设置。
payerEmail
付款人邮箱
必填1-80位
付款人邮箱;支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
payerName
付款人姓名
必填1-80位
付款人姓名;支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
payerMobile
付款人电话
必填1-20位
付款人电话:支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
maxAmount
最大金额
必填
最大金额;允许用户支付的最大金额

补充返回参数

字段 说明
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。如果需要设置不同的默认值,可联系运营进行设置。
paymentCode 用于付款的付款码
vaHolder 发码机构
guideUrl 还款指引url
guideCode 机构代码

convenience.id印尼携带还款指引的便利店非静态VA

补充参数

字段 说明
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。如果需要设置不同的默认值,可联系运营进行设置。
payerEmail
付款人邮箱
必填1-80位
付款人邮箱;支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
payerName
付款人姓名
必填1-80位
付款人姓名;支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
payerMobile
付款人电话
必填1-20位
付款人电话:支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。

补充返回参数

字段 说明
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。如果需要设置不同的默认值,可联系运营进行设置。
paymentCode 用于付款的付款码
vaHolder 发码机构
guideUrl 还款指引url
guideCode 机构代码

fix.convenience.id印尼携带还款指引的便利店静态VA

补充参数

字段 说明
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。如果需要设置不同的默认值,可联系运营进行设置。
payerEmail
付款人邮箱
必填1-80位
付款人邮箱;支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
payerName
付款人姓名
必填1-80位
付款人姓名;支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
payerMobile
付款人电话
必填1-20位
付款人电话:支付接口中如果已经传入,则会被赋值到此处;如果同时存在,以extInfo中值为准。
maxAmount
最大金额
必填
最大金额;允许用户支付的最大金额

补充返回参数

字段 说明
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。如果需要设置不同的默认值,可联系运营进行设置。
paymentCode 用于付款的付款码
vaHolder 发码机构
guideUrl 还款指引url
guideCode 机构代码

payout.bank.vn越南账户/卡代付

字段 说明
bankCode
银行代码,越南银行代码
accountHolderName
持卡人/账户姓名
accountNumber
银行卡/账户号
payeeEmail
收款人邮箱
payeeMobile
收款人的电话
accType
确认号码类型 'ACC'(账户)或'CARD'(卡)
可选
该参数须符合accountNumber类型,不传时默认为ACC

debit.vn越南借记卡支付

补充参数

字段 说明
firstName
可选
姓名前拼
lastName
可选
姓名后拼
payerEmail
可选
客户邮箱

banktransfer.vn越南银行卡支付

补充参数

字段 说明
firstName
可选
姓名前拼
lastName
可选
姓名后拼
payerEmail
可选
客户邮箱

fix.banktransfer.vn越南携带还款指引的静态VA

补充参数

字段 说明
payerName
付款人姓名
付款人姓名,需按越南姓名格式
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。

补充返回参数

字段 说明
paymentCode 用于付款的付款码
vaHolder 发码机构
guideUrl 还款指引url
vaStartDate va开始时间(yyyyMMddHHmmss)
vaEndDate va过期时间(yyyyMMddHHmmss)

otc.pk巴基斯坦携带还款指引的otc

补充参数

字段 说明
payerName
付款人姓名
必填
付款人姓名
payerMobile
付款人电话
必填
付款人电话
msisdn
Customer MSISDN
必填
格式为 ^03\d{9}$
expirationSecond
有效时长「秒」
60-24*60*60*30
默认6*60*60
选填
虚拟支付码可以使用的有效期,单位为秒,最大支持30天,默认为6小时。

补充返回参数

字段 说明
paymentCode 用于付款的付款码
vaHolder 发码机构
guideUrl 还款指引url
vaStartDate va开始时间(yyyyMMddHHmmss)
vaEndDate va过期时间(yyyyMMddHHmmss)

easypaisa.wallet巴基斯坦easypaisa wallet

补充参数

字段 说明
payerName
付款人姓名
必填
付款人姓名
payerMobile
付款人电话
必填
付款人电话
msisdn
Customer MSISDN
必填
格式为 ^03\d{9}$

订单状态

编码 状态
pending 待支付
processing 支付中
success 支付成功
failure 支付失败
timeout 支付超时
cancel 已取消

国家币种表

ISO代码 英文 中文 币种
AE United Arab Emirates 阿联酋 AED
AR Argentina 阿根廷 ARS
AU Australia 澳大利亚 AUD
BB Barbados 巴巴多斯 BBD
BH Bahrain 巴林 BHD
BI Burundi 布隆迪 BIF
BM Bermuda 百慕大 BMD
BO Bolivia 玻利维亚 BOB
BZ Belize 伯利兹 BZD
CA Canada 加拿大 CAD
CH Switzerland 瑞士 CHF
CN China 中国 内地 CNY
CR Costa Rica 哥斯达黎加 CRC
CZ Czech Republic 捷克 CZK
DJ Djibouti 吉布提 DJF
DK Denmark 丹麦 DKK
DO Dominican Republic 多米尼加 DOP
EG Egypt 埃及 EGP
GB Great Britain (United Kingdom; England) 英国 GBP
GN Guinea 几内亚 GNF
GT Guatemala 危地马拉 GTQ
HK Hong Kong 香港 HKD
HN Honduras 洪都拉斯 HNL
HR Croatia 克罗地亚 HRK
HU Hungary 匈牙利 HUF
ID Indonesia 印尼 IDR
IL Israel 以色列 ILS
IN India 印度 INR
IS Iceland 冰岛 ISK
JM Jamaica 牙买加 JMD
JP Japan 日本 JPY
KR South Korea 韩国 南朝鲜 KRW
KW Kuwait 科威特 KWD
KZ Kazakhstan 哈萨克斯坦 KZT
LK Sri Lanka 斯里兰卡 LKR
LT Lithuania 立陶宛 LTL
MA Morocco 摩洛哥 MAD
MO Macao 澳门 MOP
MX Mexico 墨西哥 MXN
MY Malaysia 马来西亚 MYR
NO Norway 挪威 NOK
NZ New Zealand 新西兰 NZD
PK Pakistan 巴基斯坦 PKR
PY Paraguay 巴拉圭 PYG
QA Qatar 卡塔尔 QAR
RU Russian Federation 俄罗斯 RUB
SA Saudi Arabia 沙特阿拉伯 SAR
SE Sweden 瑞典 SEK
SG Singapore 新加坡 SGD
TN Tunisia 突尼斯 TND
TH Thailand 泰国 THB
UG Uganda 乌干达 UGX
US United States of America (USA) 美国 USD
VN Vietnam 越南 VND
VU Vanuatu 瓦努阿图 VUV
ZA South Africa 南非 ZAR
PH The Philippines 菲律宾 PHP

银行卡代码

印尼银行代码

bankCode bankName
ARTGIDJA BANK ARTHA GRAHA
AWANIDJA BANK QNB KESAWAN
BBBAIDJA PERMATA BANK
BBUKIDJA BANK BUKOPIN
BDINIDJA BANK DANAMON
BICNIDJA BANK COMMONWEALTH
BMRIIDJA BANK MANDIRI
BNIAIDJA BANK CIMB NIAGA
BNINIDJA BANK BNI
BRINIDJA BANK BRI
BSSPIDSP BANK SUMSEL
BTANIDJA BANK TABUNGAN NEGARA (BTN)
BUMIIDJA BANK MNC/BANK BUMIPUTERA
BUTGIDJ1 BANK SYARIAH MEGA
BWKIIDJA Bank Windu Kencana
CENAIDJA BANK BCA
CICTIDJA Bank Mutiara
CITIIDJX CITIBANK
CTCBIDJA BANK CHINA TRUST INDONESIA
DBSBIDJA BANK DBS INDONESIA
DEUTIDJA DEUTSCHE BANK AG.
DJARIDJ1 BANK BRI SYARIAH
DOKUIDD1 DOKU
HNBNIDJA BANK HANA
HSBCIDJA THE HONGKONG & SHANGHAI B.C. (BANK HSBC)
HVBKIDJA BANK HIMPUNAN SAUDARA 1906
IBBKIDJA BANK BII MAYBANK
MAYAIDJA BANK MAYAPADA
MAYOIDJA BANK MAYORA
MBBEIDJA MAYBANK INDONESIA SYARIAH
MEGAIDJA BANK MEGA
MUABIDJA BANK MUAMALAT
NISPIDJA BANK OCBC NISP
NOBUIDJA Bank National Nobu
PDACIDJ1 BPD ACEH
PDBAIDJ1 BPD BALI
PDJBIDJA Bank BJB
PDJGIDJA BANK JATENG
PDJTIDJ1 BANK JATIM
PDKBIDJ1 BPD KALIMANTAN BARAT
PDKSIDJ1 BPD KALSEL
PDKTIDJA BPD KALTIM
PDLPIDJ1 BANK LAMPUNG
PDNBIDJ1 BPD NTB
PDNTIDJ1 BANK NTT
PDRIIDJA BANK RIAU
PDSBIDSP BANK NAGARI
PDSUIDSA BANK SUMUT
PDWSIDJ1 BPD SULSEL
PDWUIDJ1 BANK SULUT
PDYKIDJ1 BPD DIY
PINBIDJA BANK PANIN
RABOIDJA RABOBANK INTERNASIONAL INDONESIA
SBJKIDJA BANK SINARMAS
SCBLIDJX STANDARD CHARTERED BANK
SYCAIDJ1 BANK BCA SYARIAH
SYJBIDJ1 BANK JABAR BANTEN SYARIAH
SYMDIDJ1 BANK SYARIAH MANDIRI
SYNIIDJA BANK BNI SYARIAH
TAPEIDJ1 BANK TABUNGAN PENSIUNAN NASIONAL (BTPN)
UOBINDJA BANK UOB BUANA INDONESIA
WGOPIDD1 GoPay
WOVOIDD1 OVO

越南银行代码

bankCode bankName
ABBKVNVX An Binh (ABBank)
ASCBVNVX Asia Bank(ACB Bank)
BACAVNVX Bac A (BacABank)
BVCBVNVX Bao Viet (BaoVietBank)
CIMBVNVX CIMB Viet Nam (CIMB)
EACBVNVX Dong A (DongA Bank)
GBNKVNVX Global Petro Bank (GPBank)
HDBCVNVX Ho Chi Minh City Development Bank(HDBank)
HLBBVNVX Hongleong VN (HongleongBank)
COOPVNVX Hop Tac (Co op Bank)
IABBVNVX Indovina (Indovina Bank)
IBKBVNVX Industrial Bank of Korea (IBK HN)
BFTVVNVX JSC Bank for Foreign Trade of Vietnam (Vietcombank)
BIDVVNVX JSC Bank for Investment and Development of Vietnam (BIDV)
KLBKVNVX Kien Long (KienLongBank)
LVBKVNVX Lien Viet Post bank
MSCBVNVX Military Commercial Joint Stock Bank(MB)
NAMAVNVX Nam A (Nam A Bank)
NAVIVNVX Nam Viet (NVB)
NVBAVNVX National Citizen Bank(NCB)
NACBVNVX North Asia Bank
OJBAVNVX Ocean Bank
ORCOVNVX Orient Commercial StockBank (OCB)
PGBLVNVX Petrolimex Group Bank(PG Bank)
VIDPVNV5 Public Bank Vietnam Limited (PBVN)
SAEMVNV1 Sacombank
SACLVNVX Sai Gon (SCB)
SBITVNVX Sai Gon Cong Thuong (Saigonbank)
SHBAVNVX Sai Gon Ha Noi (SHB)
SHBKVNVX Shinhan Bank Vietnam Limited
SEAVVNVX Southeast Asia Bank (SeABank)
TPCBVNVX Tien Phong (TPBank)
UOVBVNVX United Overseas Bank (UOB)
VCBCVNVX Viet Capital Bank(Ban Viet)
VACBVNVX Vietnam Asia Bank (VietA)
VBAAVNVX Vietnam Bank for Agriculture and Rural Developmentor Agribank (Agribank)
EBVIVNVX Vietnam Export Import Commercial Joint Stock Bank(Eximbank)
VNIBVNVX Vietnam International Commercial Joint Stock Bank (VIB)
ICBVVNVX Vietnam Joint Stock Commercial Bank for industry Trade(Viettinbank)
MCOBVNVX Vietnam Maritime Commercial Stock Bank (MSB)
VPBKVNVX Vietnam Prosperity Bank(VPBank)
WBVNVNVX Vietnam Public Joint Stock Commercial Bank(PVcombank)
VTCBVNVX Vietnam Technological and Commercial Bank(TCB)
VNTTVNVX Vietnam Thuong Tin Bank (Vietbank)
VRBAVNVX Vietnam-Russia Joint Venture Bank - VRB
HVBKVNVX Woori Bank Vietnam Limited
IBKNVNVX Industrial Bank of Korea (IBK HN)

区域代码

越南区域

zoneId zoneName
1 Toàn quốc
2 An Giang
3 Bà Rịa Vũng Tàu
4 Bạc Liêu
5 Bắc Cạn
6 Bắc Giang
7 Bắc Ninh
8 Bến Tre
9 Bình Dương
10 Bình Định
11 Bình Phước
12 Bình Thuận
13 Cà Mau
14 Cao Bằng
15 Cần Thơ
16 Đà Nẵng
17 Đắk Lắk
18 Đồng Nai
19 Đồng Tháp
20 Gia Lai
21 Hà Giang
22 Hà Nam
23 Hà Nội
25 Hà Tĩnh
26 Hải Dương
27 Hải Phòng
28 Hòa Bình
29 Hưng Yên
30 Hồ Chí Minh
31 Khánh Hòa
32 Kiên Giang
33 Kon Tum
34 Lai Châu
35 Lạng Sơn
36 Lào Cai
37 Lâm Đồng
38 Long An
39 Nam Định
40 Nghệ An
41 Ninh Bình
42 Ninh Thuận
43 Phú Thọ
44 Phú Yên
45 Quảng Bình
46 Quảng Nam
47 Quảng Ngãi
48 Quảng Ninh
49 Quảng Trị
50 Sóc Trăng
51 Sơn La
52 Tây Ninh
53 Thái Bình
54 Thái Nguyên
55 Thanh Hóa
56 Thừa Thiên Huế
57 Tiền Giang
58 Trà Vinh
59 Tuyên Quang
60 Vĩnh Long
61 Vĩnh Phúc
62 Yên Bái
869 Điện Biên
912 Hậu Giang
919 Đắk Nông

Paytm Invoke Flow

商户发起支付方式为paytm.invoke,支持商户APP唤起paytm app,用户通过paytm app完成支付。

paytm.invoke流程

paytm.invoke印度paytm支付

字段 说明
mid
商户id
dokypay在paytm的唯一商户id
orderid
订单id
dokypay在paytm的订单id
txnToken
唯一标识
当前订单唯一标识

请求方式

POST

请求地址

请求参数

下列参数中,要求的填写位数为字符的长度。

字段 说明
MID
唯一商户id ( mid )
必填
dokypay在paytm的唯一商户id ( mid )
txnToken
订单唯一标识
必填
订单唯一标识
ORDER_ID
订单id ( orderid )
必填
dokypay在paytm的订单id ( orderid )

Paytm App Invoke Android

paytm.invoke-android流程

Inputs from client:

Parameters passed to client:

Result Codes:

Paytm App Invoke Android

1. Create Intent to open Paytm Activity on your App. Check the App version on the User’s phone

 
  Check current Paytm app version
  private String getPaytmVersion(Context context) {
        PackageManager pm = context.getPackageManager();
  try{
            PackageInfo pkgInfo = pm.getPackageInfo(PAYTM_APP_PACKAGE, PackageManager.GET_ACTIVITIES);
            returnpkgInfo.versionName;
  }catch (PackageManager.NameNotFoundException e) {
            PaytmUtility.debugLog("Paytm app not installed");
        }
        return null;
  }
  Compares two version strings. 
  <p>
  Use this instead of String.compareTo() for a non-lexicographical

  comparison that works for versiorn strings. e.g. "1.10".compareTo("1.6")
  @param str1 a string of ordinal numbers separated by decimal points.

  @param str2 a string of ordinal numbers separated by decimal points
  @return The result is a negative integer if str1 is _numerically_ less than str2.

  The result is a positive integer if str1 is _numerically_ greater than str2.

  The result is zero if the strings are _numerically_ equal.

  @note It does not work if "1.10" is supposed to be equal to "1.10.0".
  private int versionCompare(String str1, String str2) {
      if (TextUtils.isEmpty(str1) || TextUtils.isEmpty(str2)) {
            return 1;
      }
      String[] vals1 = str1.split("\\.");
      String[] vals2 = str2.split("\\.");
      int i = 0;
      set index to first non-equal ordinal or length of shortest version string
      while (i < vals1.length && i < vals2.length && vals1[i].equalsIgnoreCase(vals2[i])) {
            i++;
      }
      compare first non-equal ordinal number
      if (i < vals1.length && i < vals2.length) {
            int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i]));
            return Integer.signum(diff);
      }
      the strings are equal or one string is a substring of the other
      e.g. "1.2.3" = "1.2.3" or "1.2.3" < "1.2.3.4"
      return Integer.signum(vals1.length - vals2.length);
  }
  if (versionCompare(currentAppVersion, "8.6.0") < 0) {
      Full screen App Invoke flow
  }else{
      New App Invoke flow
  }

 

2. Create Intent to open Paytm Activity on Merchant App,if not installed Paytm app,webview post data to postUrl,then redirect to payment webpage

a. If the App version is less than 8.6.0, then use the code below

 
  try{
      Intent paytmIntent = new Intent();
      Bundle bundle = new Bundle();gues
      bundle.putDouble("nativeSdkForMerchantAmount", Amount);
      bundle.putString("orderid", OrderID);
      bundle.putString("txnToken", txnToken);
      bundle.putString("mid", MID);
      paytmIntent.setComponent(new ComponentName("net.one97.paytm","net.one97.paytm.AJRJarvisSplash"));
      paytmIntent.putExtra("paymentmode", 2); // You must have to pass hard coded 2 here, Else your transaction would not proceed.
      paytmIntent.putExtra("bill", bundle);
      startActivityForResult(paytmIntent, ActivityRequestCode);
      **ActivityRequestCode to be defined by merchant.
  }catch(ActivityNotFoundException e){
  //In case of Paytm app not installed, kindly handle ActivityNotFoundException
  occurred while invoking Paytm Activity.
      StringBuilder postData = new StringBuilder();
      postData.append("MID=")
              .append(mid)
              .append("&txnToken=")
              .append(txnToken)
              .append("&ORDER_ID=").append(orderid);
      webView.postUrl(postUrl + "?mid=" + mid + "&orderId=" + orderid,
                postData.toString().getBytes());
  }
 

b. Else, if the App version is 8.6.0 or greater, then use the code below for new App Invoke flow integration

 
  try{
      Intent paytmIntent = new Intent();
      paytmIntent.setComponent(new ComponentName("net.one97.paytm", "net.one97.paytm.AJRRechargePaymentActivity"))
      paytmIntent.putExtra("paymentmode", 2);
      paytmIntent.putExtra("enable_paytm_invoke", true);
      paytmIntent.putExtra("paytm_invoke", true);
      paytmIntent.putExtra("price", Amount); //this is string amount
      paytmIntent.putExtra("nativeSdkEnabled", true);
      paytmIntent.putExtra("orderid", OrderID);
      paytmIntent.putExtra("txnToken", txnToken);
      paytmIntent.putExtra("mid", MID);
      startActivityForResult(paytmIntent, requestCode);
      **requestCode to be defined by merchant.
  }catch(ActivityNotFoundException e){
  //In case of Paytm app not installed, kindly handle ActivityNotFoundException
  occurred while invoking Paytm Activity.
      StringBuilder postData = new StringBuilder();
      postData.append("MID=")
              .append(mid)
              .append("&txnToken=")
              .append(txnToken)
              .append("&ORDER_ID=").append(orderid);
      webView.postUrl(postUrl + "?mid=" + mid + "&orderId=" + orderid,
                postData.toString().getBytes());
  }
 

3. Receive output parameters in onActivityResult

 
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == ActivityRequestCode && data != null) {
        Toast.makeText(this, data.getStringExtra("nativeSdkForMerchantMessage") + data.getStringExtra("response"), Toast.LENGTH_SHORT).show();
      }
  }
 

Code Snippet for integration:

Paytm App Invoke IOS

Inputs from client:

Code Snippet for integration:

1. Merchant call Paytm deeplink ("paytm://merchantpayment?txnToken=(T)&orderId=(orderId)&mid=(mid) &amount=(amount)")

paytm.invoke-ios1流程

2. Add Following entries in Info.plist

paytm.invoke-ios2流程

3. Add URL Scheme “paytm”+”mid”

paytm.invoke-ios3流程

4. Getting Response from Paytm Client will get the response in Appdelegate Method.func application(_ app: UIApplication, open url: URL, options:[UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool

paytm.invoke-ios4流程