商户控制台¶
Adapay 为您提供了综合性的商户管理平台,您可在此处完成入网步骤、管理您的应用、维护支付功能,若您在使用中有任何问题或建议也可通过提交工单反馈。
点此查看 控制台操作手册
应用管理¶
您可根据自身经营场景等自定义不同的应用,并在不同应用下自行选择配置不同的支付功能及渠道参数,各应用会自动生成对应的 App_ID,关联该应用下所有的交易,便于您的管理。
微信 AppID 和 Adapay App_ID 的区别¶
App_ID 为 Adapay 给商户分配的 ID ,不是微信原生的 AppID。
在开通微信公众号/小程序等相关功能时已经绑定了 Adapay 的 App_ID 与微信的 AppID 之间的映射关系,故交易时候请传入 Adapay 的 App_ID。
Adapay App_ID:
微信 AppID:
渠道入驻管理¶
入驻信息修改¶
若您入驻成功后,希望修改部分入驻信息,可通过以下方式修改:
微信
微信目前支持修改:商户简称(微信侧支付成功界面的收款人)、客服电话。
菜单路径:「控制台」->「设置」->「商家信息」->「微信入驻信息」
支付宝
支付宝可支持修改:商户简称(支付宝侧支付成功界面的收款人)、入驻的经营类目、费率类型、企业类型等。
菜单路径:「控制台」->「设置」->「商家信息」->「支付宝入驻信息」
注:“认证卡号及户名”是指,若支付时不能使用花呗功能,可通过调整企业的对公卡/法人对私信息来升级支付宝商户等级,升级后即可使用花呗功能。
若需修改其他信息,请提交工单联系我们
证书管理¶
为保护您的交易安全,Adapay 接口报文全面使用 RSA 实现数字签名和敏感数据加密。
在 Prod 模式下进行真实交易,需先维护好您的安全证书。
菜单路径:「控制台」->「开发」->「证书管理」
点击可查看 证书认证 详情。
其他语言参考文档¶
签名
public static String sign(String content, String privateKey, String charset) throws Exception {
try {
//privateKey通过RSA算法生产密钥priKey
PrivateKey priKey = getPrivateKeyFromPKCS8("RSA", new ByteArrayInputStream(privateKey.getBytes()));
//通过SHA1withRSA签名算法生成signature对象
Signature signature = Signature.getInstance("SHA1withRSA");
//初始化pubKey进行签名
signature.initSign(priKey);
if (charset==null||charset.length()==0) {
signature.update(content.getBytes());
} else {
signature.update(content.getBytes(charset));
}
//生成byte[]类型的签名值
byte[] signed = signature.sign();
//通过base64加密算法,对签名值加密返回
return new String(Base64.encodeBase64(signed));
} catch (Exception var6) {
throw new Exception("RSAcontent = " + content + "; charset = " + charset, var6);
}
}
参数列表:
content:待加签字符串
规则如下:
if (RequestMethod.POST == method && file == null) {
//如果请求类型为post并且传入的参数没有file类型,则为json字符串
originalStr = params.isEmpty() ? "" : JSONObject.toJSONString(params);
} else if (RequestMethod.POST == method && file != null) {
//如果请求类型为post并且传入的参数有file类型,则将请参转换成明文
originalStr = params.isEmpty() ? "" : AdapaySign.getOriginalStr(params);
} else if (RequestMethod.GET == method) {
//如果请求类型为get,则将请参转换成明文
originalStr = params.isEmpty() ? "" : AdapaySign.getOriginalStr(params);
}
content = requestUrl + originalStr;
//根据签名规则将请求参数转换为明文
public static String getOriginalStr(Map<String, Object> map) {
List<String> listKeys = new ArrayList<>(map.keySet());
//参数字母正排序
Collections.sort(listKeys);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < listKeys.size(); i++) {
if (map.get(listKeys.get(i)) == null
|| map.get(listKeys.get(i)).toString().length() == 0) {
continue;
}
stringBuilder.append(listKeys.get(i))
.append("=")
.append(map.get(listKeys.get(i)))
.append("&");
}
return stringBuilder.length() == 0 ? ""
: stringBuilder.toString().substring(0, stringBuilder.length() - 1);
}
privateKey:PKCS8格式的私钥字符串
charset:字符集格式,统一采用UTF-8,不可修改
验签
public static boolean verifySign(String content, String sign, String publicKey, String charset) throws Exception {
try {
//通过RSA非对称加密算法,将传入的公钥publicKey转换成pubKey
PublicKey pubKey = getPublicKeyFromX509("RSA", new ByteArrayInputStream(publicKey.getBytes()));
//通过SHA1withRSA签名算法生成signature对象
Signature signature = Signature.getInstance("SHA1withRSA");
//初始化pubKey进行验证签名
signature.initVerify(pubKey);
if (charset==null||charset.length()==0) {
signature.update(content.getBytes());
} else {
signature.update(content.getBytes(charset));
}
//通过base64加密算法,对签名值加密返回
return signature.verify(Base64.decodeBase64(sign.getBytes()));
} catch (Exception var6) {
throw new Exception("RSAcontent = " + content + ",sign=" + sign + ",charset = " + charset, var6);
}
}
参数列表:
content:同签名请参中的content规则一致
sign:签名字符串
publicKey:公钥字符串
charset:字符集格式,统一采用UTF-8,不可修改
证书生成¶
格式要求
秘钥长度:1024位
PKCS8
RSA content
生成方法
方法一(推荐):
终端窗口执行以下步骤生成交易所需 RSA 秘钥(Windows 环境需提前下载安装 OpenSSL 库)
第一步:生成私钥
openssl genrsa -out rsa_private_key.pem 1024
第二步:根据私钥生成对应的公钥:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key_1024.pub
第三步:私钥转化成pkcs8格式,尖括号的意思是:将转化好的私钥写到rsa_private_key_pkcs8.pem文件里(只需要 RSA content)
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt > rsa_private_key_pkcs8.pem
方法二(仅限 Windows 操作系统,已安装JDK):
下载 AdapayUtils
方法三(仅限 Windows 操作系统,未安装JDK):
下载 未安装JDK
API Key 和交易秘钥的关系¶
API Key
商户开户以后会有两个 API Key,一个是 api_live_XXXX,另一个是 api_test_XXXX:
api_live_代表 prod 环境,api_test_代表 mock 环境,mock 环境用于模拟测试。API Key 可以在控制台中维护,变更后原 API Key 失效。API Key 代表商户的身份,与商户一一对应。
API key 与交易秘钥配套使用才能正常发起交易。
交易秘钥
Adapay 与商户之间采用 RSA (SHA1withRSA) 算法进行签名认证,商户和 Adapay 各有一套秘钥。控制台配置时,请只上传商户 RSA 秘钥公钥部分。
请求时:商户用自己的 RSA 私钥对数据进行签名,Adapay 用商户在控制配置的 RSA 秘钥进行验证。
响应时:Adapay 用自己的 RSA 私钥进行签名,商户用 Adapay 的 RSA 公钥进行验证,Adapay RSA 公钥可以在控制台获取.
结算管理¶
Adapay 商户控台支持商户自行修改结算账户以及查询结算记录。
结算查询¶
您可在控制台中,查询自身或旗下用户的结算记录。
菜单路径:「控制台」->「交易」->「结算查询」
可查询的信息:结算账户类型、交易日期、交易类型、出款方式、金额、手续费、状态、描述、商户结算账号等。
余额查询¶
菜单路径:「控制台」->「交易」->「余额查询」
商户可在控制台中查询「当前的账户余额」以及「昨日的账户余额」。
不同类型账户的含义如下:
账户名称 |
含义及作用 |
---|---|
商户简称 |
商户基本账户,账户余额可用于交易、退款及结算 |
手续费账户 |
可在控台中使用网银充值功能充值金额,目前此账户余额仅可用于交易手续费外扣模式下的手续费扣除 |
临时过渡户 |
交易(或分账)未确认前的过渡户,确认后账户余额自动调整到各分账账户中 |
商户余额查询:
商户材料上传及审核¶
应人行要求,商户入网需提交基本信息证明材料、经营信息及证件等,提交后 Adapay 运营人员会对材料进行审核。 初次提交材料或补充材料时,您可以在页面右上角点击「联系运营」与审核小伙伴沟通。
菜单路径:「控制台」->「设置」->「商家信息」->「基础材料」 / 「补充材料」
材料要求¶
- 企业商户
点击下载查看 提交示例
- 小微商户
注意事项
图片格式要求:JPG/PNG/JPEG/BMP 等类型,大小在 1M 以内,文件名中不能使用字符/、、:、*、?、”、<、>
证件资料请上传原件图片,或复印件加盖企业有色公章;
商户照片可带水印,但是不得出现其他公司水印信息;
禁入行业:卡密,虚拟交易类等;
提交及审核时效¶
自商户入网次日起, 5 个工作日内提交基础材料并需通过审核,未提交材料或审核未通过将会关闭商户状态;
工作日 17:30 之前提交的,当天会审核;
材料不完善或存在需确认的,审核同事会退回,需商户/代理商根据退回原因再次补充并提交;
审核状态可在提交界面或接口查看,也会有短信及时通知到联系人手机;
网银充值¶
网银充值功能,目前仅用于交易手续费外扣的场景,商户需先在控制台中充值资金至手续费账户,后续交易时可选择从手续费账户扣除,或在交易金额中扣除。 默认是交易金额中扣除。
充值规则¶
菜单路径:「控制台」->「交易」->「网银充值」
充 值 |
规 则 |
---|---|
充值方式 |
B2B网银(对公账户) |
充值账户主体 |
与入网主体一致,即银行账户户名与入网企业全称一致 |
充值金额 |
单笔不低于 500.00 元 |
支持银行 |
工商银行、农业银行、建设银行、交通银行、中国银行、邮储银行、招商银行、中信银行、广大银行、广发银行、兴业银行、北京银行、平安银行、浦发银行 |
充值手续费 |
充值需支付 10.00 元/笔的手续费,将从充值金额中扣除 |