请求Url : https://api.fcypay.cn

发起支付请求 POST

路径 : /api/payment

收银台模式使用Form表单提交,Json返回使用Curl提交
除收银台模式外 请不要携带“return_url”参数
“type”填写cashier时对应微信收银台 支付宝收银台填写alipay并携带“return_url”


请求参数:

键名 必填 说明
appid APPID
name 商品名称
type 支付方式:
native - 微信扫码
jsapi - 微信JSAPI
cashier - 微信收银台
alipay - 支付宝
money 支付金额 单位:元
out_trade_no 商户订单号 10位数以上英文/数字
notify_url 异步通知地址
return_url 同步跳转地址
收银台则必填
mchid 平台入驻后显示的MCHID
openid 微信用户标识 JSAPI则必填
获取请见“获取OPENID”栏
sign MD5签名

使用 哆啦宝 的说明:
因公众号原因,jsapi不会返回packge 同native返回一个code_url
微信内直接跳转到code_url即可 浏览器则转换成二维码(收银台不影响)

Json响应参数:

键名 类型 说明
code Int 布尔值 状态码
1 为成功 其他为失败
msg String 错误描述内容
data Array [ code_url : 二维码链接, packge : JSAPI支付参数 ]

订单查询 POST

路径 : /api/query

只支持传入商户单号查询


请求参数:

键名 必填 说明
appid APPID
out_trade_no 商户订单号
sign MD5签名

Json响应参数:

键名 类型 说明
code Int 布尔值 状态码
1 为支付成功 其他为失败
msg String 错误描述内容
data Array [ trade_no:系统订单号, out_trade_no:商户订单号, mchid:MCHID, money:订单支付金额, ]

发起退款 POST

路径 : /api/refund

只支持传入系统单号查询


请求参数:

键名 必填 说明
appid APPID
trade_no 系统订单号
money 退款金额 单位:元
sign MD5签名

Json响应参数:

键名 类型 说明
code Int 布尔值 状态码
1 为退款成功 其他为失败
msg String 错误描述内容

回调通知 POST

无需响应 只回调一次

支付成功后会立即发送回调到notify_url上
“money”参数为Float格式 其他都为String格式


异步POST通知参数:

键名 必填 说明
appid APPID
mchid MCHID
transaction_id 上游订单号(微信/支付宝单号)
buyer 买家标识(微信Openid/支付宝UserId)
out_trade_no 商户订单号
trade_no 系统订单号
money 订单支付金额(Float)
status 1 = 已支付 其他均为未支付
sign MD5签名

同步重定向说明(收银台):

收银台支付成功后会重定向到“return_url”,同步跳转只会携带一个商户订单号
例:http://return.url?out_trade_no=商户单号
提交的“return_url”允许携带参数 系统会自动判断
例:http://return.url?key=携带参数&out_trade_no=商户单号
可以调用“查询订单”接口进行二次查询


同步GET重定向参数:

键名 类型 说明
out_trade_no String 商户订单号

签名规则 MD5

所有接口都需签名验证 方式统一 回调同理

空值不参与签名,url参数如果携带了url字符串则需要urlencode


假如签名数据为 A
1 . 将A按照 字段名的ASCII码从小到大排序 (A-Z)
2 . 除Sign 与 空值参数外 所有参数进行Url字符串形式的拼接 例:appid=12345678&out_trade_no=xxx.... 且假设拼接好的Url字符串为B
3 . 将B与Key进行拼接 b+key 注意 + 为各语言的分隔符 并不是字符
最后MD5一下即为Sign签名(小写)

PHP:展/隐


JAVA:展/隐


易语言:展/隐


C#:展/隐

OpenID获取 GET

路径 : /api/openid

JSAPI需要调用此接口


请求参数:

键名 必填 说明
appid APPID
redirect_url 获取OPENID后的跳转地址
支持携带参数!需要urlencode
mchid mchid
sign MD5签名

GET请求该接口,获取 openid 后会带 openid 参数重定向到你提交的 redirect_url
例:
假如提交的redirect_url = https://redirect_url/callback
获取成功后就会重定向到:https:///redirect_url/callback?openid=用户OPENID
携带参数例:
携带参数需要urlencode!
假如提交的redirect_url = https://redirect_url/callback?attch=uid
获取成功后就会重定向到:https://redirect_url/callback?attch=uid&openid=用户OPENID

PHP Demo 示例参考

PHP 获取Openid

<?php
$param = [
	'appid'=>'123456',
	'mchid'=>'123456',
	'redirect_url'=>urlencode('https://api.fcypay.cn')
];
$key = '8BDF48C6519425';
$url = 'https://api.fcypay.cn/api/openid';
ksort($param);
$sign = '';
foreach ($param as $k => $v) {
	$sign.=$k.'='.$v.'&';
}
$sign = trim($sign,'&');
$sign = md5($sign.$key);
$url = $url.'?appid='.$param['appid'].'&redirect_url='.$param['redirect_url'].'&mchid='.$param['mchid'].'&sign='.$sign;
echo $url;
                                    

PHP 拉起JsPay案例

<?php
$param = [
	'appid'=>'123456',
	'name'=>'cs',
	'type'=>'jsapi',
	'money'=>'0.01',
	'out_trade_no'=>'15732093209338',
	'notify_url'=>'https://api.fcypay.cn',
	'mchid'=>'123456',
	'openid'=>'通过Openid接口获取',
];
$key = '8BDF48C65144C7A309425';
$url = 'https://api.fcypay.cn/api/payment';
ksort($param);
$sign = '';
foreach ($param as $k => $v) {
	$sign.=$k.'='.$v.'&';
}
$sign = trim($sign,'&');
$param['sign'] = md5($sign.$key);

$row_curl = curl_init();
curl_setopt($row_curl, CURLOPT_URL, $url);
curl_setopt($row_curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($row_curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($row_curl, CURLOPT_CONNECTTIMEOUT , 30);
curl_setopt($row_curl, CURLOPT_TIMEOUT, 30);
curl_setopt($row_curl, CURLOPT_POST, 1);
curl_setopt($row_curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($row_curl, CURLOPT_ENCODING, "gzip");
curl_setopt($row_curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($row_curl);
curl_close($row_curl);
$packge = json_decode($data,true)['data']['packge'];
?>
<script>
    //调用微信JS api 支付
    function jsApiCall()
    {
        WeixinJSBridge.invoke(
            'getBrandWCPayRequest',
            <?php echo $packge;?>,
            function(res){
				console.log('这里可写检测是否支付完成代码')
            }
        );
    }

    function callpay()
    {
        if (typeof WeixinJSBridge == "undefined"){
            if( document.addEventListener ){
                document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
            }else if (document.attachEvent){
                document.attachEvent('WeixinJSBridgeReady', jsApiCall);
                document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
            }
        }else{
            jsApiCall();
        }
    }
    window.onload = callpay();
</script>

PHP 支付宝(获取支付链接)

<?php
$param = [
	'appid'=>'123456',
	'name'=>'cs',
	'type'=>'alipay',
	'money'=>'0.01',
	'out_trade_no'=>'123456',
	'notify_url'=>'https://api.fcypay.cn',
	'mchid'=>'123456',
];
$key = '123456';
$url = 'https://api.fcypay.cn/api/payment';
ksort($param);
$sign = '';
foreach ($param as $k => $v) {
	$sign.=$k.'='.$v.'&';
}
$sign = trim($sign,'&');
$param['sign'] = md5($sign.$key);
$row_curl = curl_init();
curl_setopt($row_curl, CURLOPT_URL, $url);
curl_setopt($row_curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($row_curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($row_curl, CURLOPT_CONNECTTIMEOUT , 30);
curl_setopt($row_curl, CURLOPT_TIMEOUT, 30);
curl_setopt($row_curl, CURLOPT_POST, 1);
curl_setopt($row_curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($row_curl, CURLOPT_ENCODING, "gzip");
curl_setopt($row_curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($row_curl);
curl_close($row_curl);
$json = json_decode($data,true);
if(isset($json['data']['code_url'])){
    echo $json['data']['code_url']; // OK 支付链接
}else{
    echo $json['msg']; // 失败 显示错误信息
}

PHP 支付宝(收银台H5)案例 ,微信收银台同理 更改type参数为cashier即可

<?php
$param = [
	'appid'=>'123456',
	'name'=>'cs',
	'type'=>'alipay',
	'money'=>'0.01',
	'out_trade_no'=>'123456',
	'notify_url'=>'https://api.fcypay.cn',
	//收银台必须传入return_url参数
	'return_url'=>'https://api.fcypay.cn',
	'mchid'=>'123456',
];
$key = '123456';
$url = 'https://api.fcypay.cn/api/payment';
ksort($param);
$sign = '';
foreach ($param as $k => $v) {
	$sign.=$k.'='.$v.'&';
}
$sign = trim($sign,'&');
$param['sign'] = md5($sign.$key);
?>
<form id='alipaysubmit' name='alipaysubmit' method="post" action="<?php echo $url;?>">
	<?php
	foreach ($param as $k => $v) {
		echo "<input type='hidden' name=\"".$k."\" value=\"".$v."\">";
	}
	?>
	<input type="submit" value="正在发起支付....">
</form>
<script>document.forms['alipaysubmit'].submit();</script>

PHP 回调验签

<?php
	$data = $_POST;
	$sign = '';
	ksort($data);
	foreach ($data as $k => $v) {
	    if($v && $k !== 'sign') $sign .= $k . '=' . $v . '&';
	}
	$sign = md5(rtrim($sign, '&') . '你的KEY');
	if($sign == $data['sign']) {
		// 验签成功!可再次挑起查询接口二次验证 省略...
	}

快捷发起支付 GET/POST

路径 : /submit.php

快捷发起支付只支持收银台“return_url”必传 (该接口的回调与普通支付接口回调不一致 看下文) 快捷轮训 风控检测仅支持该接口


(Form表单提交)请求参数:

字段名变量名必填类型示例值描述
商户IDpidInt1001
支付方式typeStringalipayalipay:支付宝
wxpay:微信支付
商户订单号out_trade_noString20160806151343349
异步通知地址notify_urlStringhttp://域名/notify_url.php服务器异步通知地址
跳转通知地址return_urlStringhttp://域名/return_url.php页面跳转通知地址
商品名称nameString一双小拖鞋
商品金额moneyString1.00
网站名称sitenameString六六六
签名字符串signString202cb962ac59075b964b07152d234b70签名算法
签名类型sign_typeStringMD5默认为MD5

快捷支付回调 GET

注意:GET回调(同步回调一样)

快捷发起支付只支持收银台“return_url”必传 (该接口的回调与普通支付接口回调不一致 看下文) 快捷轮训 风控检测仅支持该接口
示例:地址?pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}& notify_url={服务器异步通知地址}&return_url={页面跳转通知地址}&name={商品名称}&money={金额}&sitename={网站名称}&sign={签名字符串}&sign_type=MD5


(Form表单提交)请求参数:

字段名变量名必填类型示例值描述
商户IDpidInt1001
系统订单号trade_noString20160806151343349021订单号
商户订单号out_trade_noString20160806151343349商户系统内部的订单号
支付方式typeStringalipayalipay:支付宝
wxpay:微信支付
商品名称nameString小双小拖鞋
商品金额moneyString1.00
支付状态trade_statusStringTRADE_SUCCESS
签名字符串signString202cb962ac59075b964b07152d234b70与发起支付相同
签名类型sign_typeStringMD5默认为MD5

快捷支付签名 MD5

与支付宝MD5签名算法一致

与普通版支付接口签名一致,区别在于sign_type不参数签名!