对接前置工作
一句话概括
:想用什么支付方式,您需要有对应的收款账号,然后配置到支付FM后台对应位置,最后技术对接我们接口。如果你的网站后台有支付FM的插件或 易支付系列的插件,可以不需要开发对接API,配置对应接口参数就可以。
1. 请亲爱的您要耐心看文档,文档为我们精心编写,可以解决您99%遇到的问题,文档有图文对照操作更快捷。
2. 请先看下支付方式效果说明,了解您想用且能用的支付方式的顾客支付效果。
3. 根据对接步骤完成相应的支付方式的收款号配置。
SDK下载
微盘下载:https://share.weiyun.com/E2B4ZoBO
QQ群下载:366959204
页面跳转支付
此接口可用于用户前台直接发起支付,使用form表单跳转或拼接成url跳转。
URL地址:【用户中心】查看到的【V2接口地址】后拼接 submit.php
请求方法:
GET/POST
推荐POST,不容易被劫持或屏蔽
参数传递:Query
Content-Type:application/x-www-form-urlencoded
POST数据示例:pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}¬ify_url={服务器异步通知地址}&return_url={页面跳转通知地址}&name={商品名称}&money={金额}&sign={签名字符串}&sign_type=MD5
页面跳转模式请求参数说明
URL地址:【用户中心】查看到的【V2接口地址】
,一般有些系统的接口地址配置时候不用带/
,如果请求失败,请去掉【V2接口地址】后的 /
或 【V2接口地址】后拼接 submit.php
请求方式:POST 或 GET(推荐POST,不容易被劫持或屏蔽)
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
商户ID | pid | 是 | String | 1001 | 对应支付FM平台的商户号。在支付FM商户后台【用户中心】处可查看,该值不是用户名。 |
支付方式 | type | 是 | String | alipay,wxpay | 支付宝、微信。默认关联支付宝和微信收款码方式。通过用户中心的v2关联功能可以不调整代码,随意更换支付方式。支付方式介绍:https://docs.zhifux.com/read/zhifufm/paytype |
商户订单号 | out_trade_no | 是 | String | 20160806151343349 | 商户订单号。仅允许字母或纯数字,建议不超过32字符,不能有中文 |
异步通知地址 | notify_url | 是 | String | 域名/notify_url.php | 服务器异步通知地址,http(s)开头的网址。商户业务系统用来接收支付结果通知数据的回调地址,通知url必须为公网可访问的网址,且不能携带参数 ,收到通知后请根据规范返回成功标志,请根据通知参数规范使用Postmam等工具功能测试后传入。示例值: https://www.xxxx.com/payfm/payCalback.php |
跳转通知地址 | return_url | 是 | String | 域名/return_url.php | 支付FM后台订单状态为已支付才会跳转。支付完成后展示网址,有些支付方式在手机中无法跳转,所以请勿用此地址做验证或者业务强关联。200字符以内, 常见为业务系统的支付成功提示、订单中心、会员中心网址等,又称同步跳转地址。 为了安全考虑不要和notifyUrl值传入一样。 |
商品名称 | name | 是 | String | VIP会员 | |
商品金额 | money | 是 | number | 1 | 订单金额。请求的支付金额(单位:元),最多小数点后保留2位 |
网站名称 | sitename | 否 | String | 云任务 | |
业务扩展参数 | param | 否 | String | 没有请留空 | 支付后原样返回 |
签名字符串 | sign | 是 | String | 202cb962ac59075b964b07152d234b70 | 签名算法点此查看签名算法中的KEY 对应支付FM平台的“接入密钥”,在支付FM商户后台【用户中心】处可查看 |
签名类型 | sign_type | 是 | String | MD5 | 默认为MD5 |
POST接口支付
此接口可用于服务器后端发起支付请求,会返回JSON数据格式,自行解析展示数据中的支付链接。
URL地址:在支付FM商户后台【用户中心】处可查看到的“V2接口地址”后拼接mapi.php
请求方法:
POST
参数传递:Query
Content-Type:application/x-www-form-urlencoded
POST数据示例:pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}¬ify_url={服务器异步通知地址}&return_url={页面跳转通知地址}&name={商品名称}&money={金额}&sign={签名字符串}&sign_type=MD5
请求参数说明:
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
商户ID | pid | 是 | String | 1001 | |
支付方式 | type | 是 | String | alipay | 支付方式列表 |
商户订单号 | out_trade_no | 是 | String | 20160806151343349 | |
异步通知地址 | notify_url | 是 | String | http://域名/notify_url.php | 服务器异步通知地址 |
跳转通知地址 | return_url | 否 | String | http://域名/return_url.php | 页面跳转通知地址 |
商品名称 | name | 是 | String | VIP会员 | 如超过127个字节会自动截取 |
商品金额 | money | 是 | number | 1.02 | 单位:元,最大2位小数 |
用户IP地址 | clientip | 是 | String | 192.168.1.100 | 用户发起支付的IP地址 |
设备类型 | device | 否 | String | pc | 根据用户浏览器的UA判断,传入用户所使用的浏览器或设备类型,默认为pc设备类型列表 |
业务扩展参数 | param | 否 | String | 没有请留空 | 支付后原样返回 |
签名字符串 | sign | 是 | String | 202cb962ac59075b964b07152d234b70 | 签名算法点此查看 |
签名类型 | sign_type | 是 | String | MD5 | 默认为MD5 |
返回结果(json):
字段名 | 变量名 | 类型 | 示例值 | 描述 |
---|---|---|---|---|
返回状态码 | code | Int | 1 | 1为成功,其它值为失败 |
返回信息 | msg | String | 失败时返回原因 | |
订单号 | trade_no | String | 20160806151343349 | 支付订单号 |
支付链接 | payurl | String | 如可以直接跳转到该url支付,也可以在Iframe、Webview中打开此页面。顾客访问该网址就是对应不同支付方式的效果。如您的业务系统为APP,请调用手机浏览器访问此链接,不建议在APP内直接访问 | |
二维码链接 | qrcode | String | 该字段里面没有传值 |
MD5签名算法
KEY 对应支付FM用户中心的 接入密钥
1、将发送或接收到的所有参数按照参数名ASCII码从小到大排序(a-z),sign、sign_type、和空值不参与签名!
2、将排序后的参数拼接成URL键值对的格式,例如 a=b&c=d&e=f,参数值不要进行url编码。
3、再将拼接好的字符串与商户密钥KEY进行MD5加密得出sign签名参数,sign = md5 ( a=b&c=d&e=f + KEY ) (注意:+ 为各语言的拼接符,不是字符!),md5结果为小写。
参数拼接示例:
sign:money=1&name=【A0125】¬ify_url=https://www.zhifux.com/success.txt&out_trade_no=38329329329121&pid=442130427265040384&return_url=https://www.baidu.com&type=alipay072c320169c1c4043277c8746c26050f
sign的MD5结果:134d9c7103b5534ea72935542c9e4a31
JAVA签名函数示例:
public static String signed(String key, Map<String, Object> paramMap) {
String signStr = "";
for (Map.Entry<String, Object> m : paramMap.entrySet()) {
if("sign_type".equals(m.getKey()) || "sign".equals(m.getKey())) {
continue;
}
signStr += m.getKey() + "=" + m.getValue() + "&";
}
// 去掉最后一个 &
signStr = signStr.substring(0, signStr.length() - 1);
// 最后拼接上KEY
signStr += key;
System.out.println(signStr);
// 转为MD5
return new Digester(DigestAlgorithm.MD5).digestHex(signStr);
}
PHP签名函数示例:
// 计算签名
private function getSign($param){
ksort($param);
reset($param);
$signstr = '';
foreach($param as $k => $v){
if($k != "sign" && $k != "sign_type" && $v!=''){
$signstr .= $k.'='.$v.'&';
}
}
$signstr = substr($signstr,0,-1);
$signstr .= $this->key;
$sign = md5($signstr);
return $sign;
}