开发文档:www.koolyun.com/koolguide/t…
Koolyun支持(跨境)海外支付宝和微信的支付订单,支持港澳台。以人民币支付
koolyun支持项目种类:
1、微信QrCode
2、微信JsAPI
3、微信小程序
5、支付宝H5
6、支付宝JsApi
7、线下支付订单
8、电信翼支付
koolyun支持项目种类说明:
1.1.1.CSBPAY
调用流程如下: 接入方前台向接入方后台调用接口(接入方私有接口) 接入方后台向平台方调用“交易请求”接口,action:csbpay 平台方返回接入方一个订单二维码 接入方后台向接入方前台返回二维码 接入方前台向消费者展示二维码,等待消费者使用钱包客户端进行扫码支付;同时接入方后台等待平台方异步通知交易结果,或按策略发起主动查询请求传递给平台方。(具体返回码参考字典6.5) 若接入方后台未及时收到异步通知结果,向平台方调用“交易结果查询”接口,轮询交易结果 接口返回“未知”时,接入方后台按策略(建议等待5秒后),再调用“交易结果查询”接口 接口返回“成功”/“失败”时,可再返回给接入方前台 轮询查询接口不要超过1分钟(11次) 接入方后台返回交易结果给接入方前台。如碰到接入方前端超时,接入方前端根据自身的业务策略,判定交易是否走人工差错(挂账或手动登台账)
1.1.2.BSCPAY
调用流程如下: 接入方前台扫描消费者钱包的付款二维码/条码,并调用私有接口将二维码/条码发送到接入方后台 接入方后台向平台方调用“交易请求”接口,action:bscpay 平台方返回接入方后台支付结果(具体返回码参考字典6.5) 返回“成功”/“失败”,当消费者未设置支付密码时,可同步返回 返回“未知”,当消费者正在输入支付密码时 接入方后台收到“成功”/“失败”明确的结果后,将交易结果返回给接入方前台 接入方后台收到“未知”后,向平台方调用“交易结果查询”接口,轮询交易结果 接口返回“未知”时,接入方后台按策略(建议等待5秒后),再次调用“交易结果查询”接口 接口返回“成功”,“失败”时,可再返回给接入方前台 轮询查询接口不要超过1分钟(11次) 接入方后台返回交易结果给接入方前台。如碰到接入方前端超时,接入方前端根据自身的业务策略, 判定交易是否走人工差错(挂账或手动登台账)
1.1.3.CANCEL
调用流程如下: 接入方前台向接入方后台调用接口(接入方私有接口),撤销请设置权限控制。 接入方后台向平台方调用“交易请求”接口,action:cancel 平台方同步返回交易结果(具体返回码参考字典6.5) 返回“成功”/“失败” 返回“未知” 接入方后台收到“成功”/“失败”明确的结果后,将交易结果返回给接入方前台 接入方后台收到“未知”后,向平台方调用“交易结果查询”接口,轮询交易结果 接口返回“未知”时,接入方后台按策略(建议等待5秒后),再次调用“交易结果查询”接口 接口返回“成功”,“失败”时,可再返回给接入方前台 轮询查询接口不要超过1分钟(11次) 接入方后台返回交易结果给接入方前台。如碰到接入方前端超时,接入方前端根据自身的业务策略, 判定交易是否走人工差错(挂账或手动登台账) *注意: 撤销交易仅限交易当天(GMT+8区24点前)可发起撤销,隔日无法撤销。如需要隔日退款,走人工申请退款流程(填单),交于平台方运营人员转交清算人员并作交易轧差。
1.1.4.REFUND
调用流程如下: 接入方前台向接入方后台调用接口(接入方私有接口),撤销请设置权限控制。 接入方后台向平台方调用“交易请求”接口,action:refund 平台方返回接入方后台支付结果(具体返回码参考字典6.5) 返回“成功”/“失败”,当消费者未设置支付密码时,可同步返回 返回“未知”,当消费者正在输入支付密码时 接入方后台收到“成功”/“失败”明确的结果后,将交易结果返回给接入方前台 接入方后台收到“未知”后,向平台方调用“交易结果查询”接口,轮训交易结果 接口返回“未知”时,接入方后台按策略(建议等待5秒后),再次调用“交易结果查询”接口 接口返回“成功”,“失败”时,可再返回给接入方前台 轮询查询接口不要超过1分钟(11次) 接入方后台返回交易结果给接入方前台。如碰到接入方前端超时,接入方前端根据自身的业务策略,判定交易是否走人工差错(挂账或手动登台账)
1.1.5.JSPAY
调用流程如下: 接入方前台向接入方后台调用接口(接入方私有接口) 接入方后台向平台方调用“交易请求”接口,action:jspay 平台返回微信生成的预支付会话标识,用于后续接口调用中使用,该值有效期为2小时
1.1.6. APPPAY
调用流程如下:
接入方前台向接入方后台调用接口(接入方私有接口)
接入方后台向平台方调用“交易请求”接口,action:apppay
平台返回拉起支付宝微信app所需要的前置参数
示例代码(需要联系对方对接人员要接口文档以及继承类)
<?php
class Koolrun
{
public function apmPay($openid, $money, $order_number, $description = '订单', $notify_url = '')
{
//登陆
$loginRequest = new loginRequest();
$loginRequest->action = 'msc/user/login';
$loginRequest->v = \wx\apm\ApmConfig::LOGIN_V;
$loginRequest->iposSn = \wx\apm\ApmConfig::IPOS_SN;
$loginRequest->merchId = \wx\apm\ApmConfig::MERCH_ID;
$loginRequest->operator = \wx\apm\ApmConfig::OPERATOR;
$loginRequest->pwd = md5(\wx\apm\ApmConfig::LOGIN_PWD);
$loginResult = \wx\apm\QrcodePayApi::login($loginRequest);
if ($loginResult['body']['responseCode'] != 0) {
return sendArray([], 201, $loginResult['body']['errorMsg']);
}
//发起支付请求
$CSBPayRequest = new CSBPayRequest();
$CSBPayRequest->action = 'msc/txn/request';
$CSBPayRequest->paymentId = \wx\apm\ApmConfig::PAYMENTID_WEIXIN;
$CSBPayRequest->transType = '1021';
$CSBPayRequest->batchNo = $loginResult['body']['batchNo'];
$CSBPayRequest->traceNo = '000001';
$CSBPayRequest->transTime = date('YmdHis');
$wxpay_config_model = new WxpayConfig();
//是否开启测试价钱
$is_test_price = $wxpay_config_model->isTestPrice();
if ($is_test_price) {
$money = 10;
} else {
$money = $money * 100;
}
$CSBPayRequest->transAmount = $money;
$CSBPayRequest->odNo = $order_number;
$CSBPayRequest->odDesc = "支付";
$CSBPayRequest->currency = '344';
$CSBPayRequest->notifyUrl = $notify_url;
$CSBPayRequest->payType = \wx\apm\ApmConfig::PAYTYPE_WEIXIN;
$CSBPayRequest->dataAction = \wx\apm\ApmConfig::CSB_ACTION;
$dataJson = json_encode(array(
'action' => 'jspay',
'subOpenId' => $openid,
'payType' => $CSBPayRequest->payType,
));
$CSBPayRequest->data = $dataJson;
$CSBPayResult = \wx\apm\QrcodePayApi::CSBPay($CSBPayRequest, $loginResult['header']['x_apsessionid']);
if ($CSBPayResult['body']['responseCode'] != 0) {
return sendArray([], 201, $CSBPayResult['body']['errorMsg']);
}
//登出
$loginOut = new loginRequest();
$loginOut->action = 'msc/user/logout';
$loginOutResult = \wx\apm\QrcodePayApi::login($loginOut);
if ($loginOutResult['body']['responseCode'] != 0) {
return sendArray([], 201, $loginOutResult['body']['errorMsg']);
}
$data = json_decode($CSBPayResult['body']['data'], true);
$return_data = [
'timeStamp' => $data['timeStamp'],
'nonceStr' => $data['nonceStr'],
'package' => $data['package'],
'paySign' => $data['paySign'],
];
return sendArray($return_data);
}
}