Pay center Api
Version: 1.0.0
Contact information:
renlikang@dalongyun.com
免登陆对接
- 免登陆对接
若产品对接内含有“免登陆”需求时,需要按照如下操作进行对接:
1.业务前端会在访问合作产品的URL后方拼接三项参数(openid、channel_name、merchant),范例:http://yourdomian.com?openid=ajjdsaiewq&channel_name=joyark_android&merchant=joyark
其中“ajjdsaiewq”为openid;“joyark_android”channel_name;“joyark”为merchant
2.“openid”需要作为用户唯一标识,绑定用户游戏身份。
3.“channel_name、merchant”为内部鉴权参数,需要在创建“充值订单”时,与“openid”一并提交
签名规则
- 签名算法
RSA
Key格式:PKCS8
签名算法:SHA256WithRSA
密钥长度:2048
生成公私钥后使用base64编码后输出
- 公私钥生成
首选安装openssl,参考文档:https://www.openssl.org/source/
商户可以通过如下命令生成公私钥:1.#生成后的公私钥文件为pem格式,然后将换行符替换成空
2.#私钥
3.openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out private.key.pem
4.#公钥
5.openssl rsa -in private.key.pem -pubout > public.key.pem执行完上述命令后,会生成两个文件private.key.pem和 public.key.pem,其中private.key.pem为私钥,在请求交易时签名报文,由商户自行保管;public.key.pem 为公钥,需通过Merchant Dashboard平台上传上传给 PayerMax。 public.key.pem的内容如下(示例):
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAybRQ39Dmt+Re1pVmNHzC dVdMpSYauLB5Ydb1yiDZBObneSrBwcDDHm3Jbn6/Gpzoo3lgX+kiR0PtYszpybjI Zo3Xu7rhOE7//VfYvHWHLuxeglaUnsPGc37fVB8FM+HB3AfI+Jpw/HMAFZGHFZZ8 xcGbgW5n4S0d6ExBu/RDjX0ssZeDRWG/NGmuVukmu79RlX2+gmaIth5R+TI+fVL1 tqlQ5bYenTt1iCYUQXjfuNaeRQvxxjgXCtwKkhsg+gRKJRTypDsUxOxq0qRmn7fZ X8Lw9LJsbiIRG6u4EupSiPeU2rqAELIhLFvR57KTapQ+emS6FTdd651KZK97qYy7 fQIDAQAB
- 签名
将请求报文ASCII排序组成对象后转换成json string后使用商户RSA私钥进行签名,将签名获得的值放入http header中,key为sign
支付渠道
| 支付渠道 | 国家/地区 | 支付钱包 |
|---|---|---|
| Airwallex | 全球 | Visa |
| Mastercard | ||
| Payermax | 中国香港 | ALIPAYHK |
| 中国台湾 | 台灣信用卡、國際信用卡 | |
| 印度尼西亚 | BCA、BNI、BRI、BTPN、CIMB、Danamon、MUAMALAT、Mandiri、Maybank、Permata、Sinarmas、Credit/Debit Card(redirect)、Alfamart、BRI、Danamon、Maybank、Permata、One-Touch(DANA)、QRIS、Akulaku、DANA、Doku Wallet、OVO、ShopeePAY | |
| 俄罗斯 | QIWI | |
| 韩国 | Bank Transfer、Virtual Account、Credit Card、KAKAOPAY、PAYCO、toss | |
| 马来西亚 | Axiata Boost、Grab Pay、Touch’n Go | |
| 菲律宾 | Bank Transfer、BPI、UnionBank、BillEase、DragonPay Credits、Paymaya、GCash、Grab Pay | |
| 新加坡 | eNETS、GrabPay、PayNow | |
| 泰国 | TrueMoney One-Touch、Line Pay、PromptPay、TrueMoney | |
| 阿联酋 | Visa/MasterCard | |
| 巴林 | Visa/MasterCard | |
| 埃及 | Visa/MasterCard | |
| 约旦 | Visa/MasterCard | |
| 科威特 | KNET、Visa/MasterCard | |
| 阿曼 | Visa/MasterCard | |
| 卡塔尔 | Visa/MasterCard | |
| 沙特阿拉伯 | MADA、Visa/MasterCard | |
| 土耳其 | Akbank、Alternatifbank、DenizBank、Finansbank、Garabti Bankasi、Halkbank、Kuveyt Türk、PTT、Türk Ekonomi Bankası、Türkiye Finans Katilim Bankasi、VakıfBank、Yapı Kredi、Ziraat Bank、İşbank、Şekerbank、Debit/Credit Card、Ininal、GPay Wallet、Papara、 | |
| 巴西 | Banco do Brasil、Bradesco、Caixa、Itau、Santander、Boleto、Boletofast、Lottery、PIX、Ame、MercadoPago、PagSeguro、PicPay | |
| 智利 | WebPay、Credit Card、Servipag | |
| 哥伦比亚 | Debit/Credit Card、PSE、Baloto、Davivienda、Efecty | |
| 墨西哥 | BBVA、Banorte、SPEI、STP、Santander、Debit/Credit Card、OXXO | |
| 秘鲁 | BBVA、BCP、Interbank、Debit/Credit Card、PagoEfectivo |
- 签名算法
测试卡
| 支付渠道 | 测试卡号 | 类型 | 说明 |
|---|---|---|---|
| Airwallex | 4035 5010 0000 0008 | Visa | 这张卡无论金额多少都会支付成功 |
| 4012 0003 0000 1003 | Visa | 付款金额为:80.59时,拒绝 | |
| 2223 0000 1018 1375 | Mastercard | 付款金额为:80.05时,拒绝 | |
| Payermax | 4444333322221111 | Visa | 姓名:James Smith 有效期-年:25 有效期-月:03 CVV:123 |
| 5555555555554444 | Master | 姓名:Allen Black 有效期-年:26 有效期-月:11 CVV:357 |
创建订单
- 请求url
| 环境 | 请求URL |
|---|---|
| 测试环境 | https://developapidev.joyark.com/en/pay-center/recharge-order/create |
| 生产环境 | https://api-game.joyark.com/en/pay-center/recharge-order/create |
- 请求方式
Post
- header参数
| 请求参数 | 必选 | 参数类型 | 说明 |
|---|---|---|---|
| sign | 是 | sring | 签名 |
| Content-Type | 是 | sring | application/json |
- 请求参数
| 请求参数 | 必选 | 参数类型 | 长度 | 说明 |
|---|---|---|---|---|
| timestamp | 是 | sring | 32 | 请求时间,符合rfc3339规范,格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX 事例:2022-01-22T10:00:00.500+08:00 |
| payType | 是 | sring | 30 | 支付方式: Payermax Airwallex |
| mchId | 是 | int | 64 | 平台商户号 |
| good | 是 | sring | 100 | 商品名称 |
| paymentMethods | 否 | array | array | 具体支付方式:例如'card' |
| currency | 是 | sring | 3 | 币种代码,大写字母 备注:Payermax会根据国家代码自动将所传货币转为本币进行结算 |
| money | 是 | sring | (10,2) | 支付金额 |
| returnUrl | 是 | sring | 256 | 跳转地址 |
| country | 否 | sring | 3 | 国家代码,大写字母 |
| userId | 有条件 | int | 64 | 用户ID payType= Payermax 必填 |
| language | 否 | sring | 8 | 收银台页面语言 |
| productId | 有条件 | string | 64 | payType= Payermax Paypal 必填 |
| + metadata | 有条件 | object | 附加参数 | |
| openid | 有条件 | string | 128 | 用户标识 openid |channel_name |merchant三个参数要不全传要不全不传,传其中一个无效 ;对接免登陆必传 |
| channel_name | 有条件 | string | 128 | 设备标识 |
| merchant | 有条件 | string | 128 | 渠道标识 |
| +products | 有条件 | Array | Array | payType= Airwallex 必填 |
| code | 否 | sring | 64 | 商品ID |
| desc | 否 | sring | 100 | 商品描述 |
| name | 否 | sring | 100 | 商品标题 |
| quantity | 否 | int | 16 | 商品数量 |
| unit_price | 否 | (10,2) | 手机号码 | 商品单价 |
| type | 否 | int | 4 | 商品类型 |
- 请求示例
{
"currency": "SGD",
"good": "test",
"mchId": 10002,
"money": "10.00",
"payType": "payermax",
"returnUrl": "https://webdev.bifrost.com/v1/pay/payerMaxNotify",
"timestamp": "2022-10-12T07:40:23.371Z",
"userId": "123456"
}
2
3
4
5
6
7
8
9
10
- 返回参数
返回参数
| 返回参数 | 参数类型 | 说明 |
|---|---|---|
| timestamp | sring | 请求时间,符合rfc3339规范,格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX 事例:2022-01-22T10:00:00.500+08:00 |
| code | int | 状态码 |
| msg | sring | 错误信息 |
| +data | array | 返回数据 |
| orderNo | sring | 平台订单号 |
| url | sring | 收银台页面 |
| thirdOrderSign | sring | payType=PayerMax时返回 |
错误返回参数
| 返回参数 | 参数类型 | 说明 |
|---|---|---|
| code | int | 状态码 |
| msg | sring | 错误信息 |
| timestamp | sring | 请求时间,符合rfc3339规范,格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX 事例:2022-01-22T10:00:00.500+08:00 |
// 示例
{
"code": 200,
"data": {
"url": "https://cashier-n-uat.payermax.com/index.html#/cashier/home?merchantId=010113835116808&merchantAppId=95aff0f7ffe445e5a5fad276d88c79a1&tradeToken=TOKEN202210270000381115&language=en&token=4334dca7036b4c88909bfd937910da6d&frontCallbackUrl=https%3A%2F%2Fdevelopapidev.joyark.com%2Fen%2Fpay-center%2Forder%2Freturn%3FreturnUrl%3Dhttps%3A%2F%2Fwebdev.bifrost.com%2Fv1%2Fpay%2FpayerMaxNotify%26payStatus%3D1&version=1.0",
"orderNo": "443.PA.20221027-20151109-10982861-08710506-2290",
"thirdOrderSign": "003202210270851172290"
},
"msg":"SUCCESS",
"timestamp": "2022-10-27T08:51:19.000+00:00"
}
2
3
4
5
6
7
8
9
10
11
查询订单
- 请求url
| 环境 | 请求URL |
|---|---|
| 测试环境 | https://developapidev.joyark.com/en/pay-center/recharge-order/info |
| 生产环境 | https://api-game.joyark.com/en/pay-center/recharge-order/info |
- 请求方式
Post
- header参数
| 请求参数 | 必选 | 参数类型 | 说明 |
|---|---|---|---|
| sign | 是 | sring | 签名 |
| Content-Type | 是 | sring | application/json |
- 请求参数
| 请求参数 | 必选 | 参数类型 | 长度 | 说明 |
|---|---|---|---|---|
| timestamp | 是 | sring | 32 | 请求时间,符合rfc3339规范,格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX 事例:2022-01-22T10:00:00.500+08:00 |
| orderNo | 是 | sring | 30 | 平台订单号 |
| mchId | 是 | int | 64 | 平台商户号 |
- 请求示例
{
"mchId": 10002,
"orderNo": "443.PA.20221027-20151109-10982861-08710506-2290",
"timestamp": "2022-10-12T07:40:23.371Z",
}
2
3
4
5
- 返回参数
正确返回参数
| 返回参数 | 参数类型 | 说明 |
|---|---|---|
| timestamp | sring | 请求时间,符合rfc3339规范,格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX 事例:2022-01-22T10:00:00.500+08:00 |
| code | int | 状态码 |
| msg | sring | 错误信息 |
| +data | array | 返回数据 |
| orderNo | sring | 平台订单号 |
| amount | string | 支付金额 |
| payTime | sring | 支付时间 |
| status | sring | CREATE-创建,PAYING-支付中,IN_PROGRESS-支付成功,FAILED-支付失败,REVERSED-取消订单 |
错误返回参数
| 返回参数 | 参数类型 | 说明 |
|---|---|---|
| code | int | 状态码 |
| msg | sring | 错误信息 |
| timestamp | sring | 请求时间,符合rfc3339规范,格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX 事例:2022-01-22T10:00:00.500+08:00 |
// 正确
{
"code": 200,
"data": {
"amount": "10.00",
"orderNo": "443.PA.20221027-20151109-10982861-08710506-2290",
"payTime": null,
"status": "REVERSED",
},
"msg":"SUCCESS",
"timestamp": "2022-10-27T08:51:19.000+00:00"
}
2
3
4
5
6
7
8
9
10
11
12
异步通知
1.同样的通知可能会多次发送给商户系统。商户系统须能够正确的处理重复通知。
2.后台通知交互时,如果平台收到商户的应答不符合规范或超时,会判定本次通知失败,重新发送通知,直到成功为止(在通知一直不成功的情况下,会发一直通知).
3.在订单状态不明或者没有收到平台支付结果通知的情况下,建议商户主动调用【查询订单】接口确认订单状态。
- 通知方式
Post
- header参数
| 请求参数 | 必选 | 参数类型 | 说明 |
|---|---|---|---|
| sign | 是 | sring | 签名 |
| Content-Type | 是 | sring | application/json |
- 接口参数
| 请求参数 | 必选 | 参数类型 | 长度 | 说明 |
|---|---|---|---|---|
| timestamp | 是 | sring | 32 | 请求时间,符合rfc3339规范,格式:yyyy-MM-dd’T’HH:mm:ss.SSSXXX 事例:2022-01-22T10:00:00.500+08:00 |
| orderNo | 是 | sring | 30 | 平台订单号 |
| type | 是 | int | 4 | 订单类型 1 payment订单 2 subscription订单 |
| status | 是 | string | 64 | CREATE-创建,PAYING-支付中,IN_PROGRESS-支付成功,FAILED-支付失败,REVERSED-取消订单 REFUSE-拒付(只通知1次) |
| amount | 是 | string | (10,2) | 商户传入的订单金额 |
| currencyCode | 是 | string | 3 | 订单币种 |
| payTime | 是 | string | 32 | 支付时间 |
| + metadata | 否 | object | 附加参数 | |
| openid | 否 | string | 128 | 用户标识 |
| channel_name | 否 | string | 128 | 设备标识 |
| merchant | 否 | string | 128 | 渠道标识 |
| merchantName | 否 | string | 50 | 商户名 |
- 返回
成功时,http返回状态码为200
