最近业务需求,需要做一个建行支付,其中分为主扫和被扫,主扫相对简单;
完整建行支付
建行被扫支付:https://blog.csdn.net/weixin_42674576/article/details/122380110?spm=1001.2014.3001.5501
被扫支付查单:https://blog.csdn.net/weixin_42674576/article/details/122380365?spm=1001.2014.3001.5501
退款:https://blog.csdn.net/weixin_42674576/article/details/122428305
首先是配置一下主扫,这里仅将必须参数配置
<?php
return [
'bankUrl' => 'https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain',
//主扫
'pay' => [
'CCB_IBSVersion' => 'V6',
'MERCHANTID' => '105910100002105', //商户代码
'POSID' => '662222818', //商户柜台代码
'BRANCHID' => '441000000', //分行代码
'CURCODE' => '01', //币种
'TXCODE' => '530550', //交易码
'PUB' => '3d23ac1f0390bd82bf3fc69d020111', //柜台的公钥后30位
//其他非必须参数,根据需求配置
'RETURNTYPE' => '2', //0 或空:返回二维码页面,只支持建行龙支付;1:返回 JSON 格式【二维码信息串】,只支持建行龙支付;2:返回聚合扫码二维码页面;3:返回聚合扫码 JSON格式【二维码信息串】聚合扫码只能上送 2 或 3,4:返回聚合银联二维码信息串
]
];
然后,主扫服务接口
public function pay($input){
$bankUrl = config('ccb.bankUrl');
$param = config('ccb.pay');
$timeout = date("YmdHis",strtotime("+600 seconds"));
$data['CCB_IBSVersion'] = $param['CCB_IBSVersion'];
$data['MERCHANTID'] = $param['MERCHANTID'];
$data['POSID'] = $param['POSID'];
$data['BRANCHID'] = $param['BRANCHID'];
$data['ORDERID'] = $input['ORDERID'];
$data['PAYMENT'] = $input['PAYMENT'];
$data['CURCODE'] = $param['CURCODE'];
$data['REMARK1'] = '';
$data['REMARK2'] = '';
$data['TXCODE'] = $param['TXCODE'];
$data['RETURNTYPE'] = $param['RETURNTYPE'];
$data['TIMEOUT'] = $timeout;
$data['PUB'] = $param['PUB'];
//MAC 校验域
$mac = 'MERCHANTID='.$param['MERCHANTID'];
$mac .= '&POSID='.$param['POSID'];
$mac .= '&BRANCHID='.$param['BRANCHID'];
$mac .= '&ORDERID='.$input['ORDERID'];
$mac .= '&PAYMENT='.$input['PAYMENT'];
$mac .= '&CURCODE='.$param['CURCODE'];
$mac .= '&TXCODE='.$param['TXCODE'];
$mac .= '&REMARK1=';
$mac .= '&REMARK2=';
$mac .= '&RETURNTYPE='.$param['RETURNTYPE'];
$mac .= '&TIMEOUT='.$timeout;
$mac .= '&PUB='.$param['PUB'];
$mac = md5($mac);
$data['MAC'] = $mac;
$url = $bankUrl.'?'.http_build_query($data);
$res = $this->httpRequest($url);
return $res;
}
function httpRequest($url = null, $data = null,$post=1)
{
$curl = curl_init(); // curl 初始化设置
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 校验证书节点
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);// 校验证书主机
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}else if($post){
curl_setopt($curl, CURLOPT_POST, 1);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 以文件流的形式 把参数返回进来
// 执行
$res = curl_exec($curl);
curl_close($curl);
if (json_encode($res) === 'null'){
//$res = mb_convert_encoding($res,"GBK","UTF-8");
$res = iconv("gb2312","utf-8",$res);
}
return $res;
}
$res 中就能查看到返回的结果
页面展示二维码效果
PHP 之建行龙支付-被扫(商家扫码客户二维码),扫码枪使用:https://blog.csdn.net/weixin_42674576/article/details/122380110?spm=1001.2014.3001.5501