海外支付koolyun对接

442 阅读6分钟

官网:www.koolyun.com/

开发文档: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);
    }
}