本示例依赖于银联条码支付【统一】扫码支付PHP版DEMO,此DEMO可在银联官网下载(https://up.95516.com/open/openapi/doc?index_1=1&index_2=1&chapter_1=238&chapter_2=268),新增内容已在代码中标注说明。
<?php
/**
* 支付接口调测例子
* ================================================================
* index 进入口,方法中转
* submitOrderInfo 提交订单信息
* queryOrder 查询订单
*
* ================================================================
*/
require('Utils.class.php');
require('config/config.php');
require('class/RequestHandler.class.php');
require('class/ClientResponseHandler.class.php');
require('class/PayHttpClient.class.php');
Class Request{
private $resHandler = null;
private $reqHandler = null;
private $pay = null;
private $cfg = null;
public function __construct(){
$this->Request();
}
public function Request(){
$this->resHandler = new ClientResponseHandler();
$this->reqHandler = new RequestHandler();
$this->pay = new PayHttpClient();
$this->cfg = new Config();
$this->reqHandler->setGateUrl($this->cfg->C('url'));
$sign_type = $this->cfg->C('sign_type');
if ($sign_type == 'MD5') {
$this->reqHandler->setKey($this->cfg->C('key'));
$this->resHandler->setKey($this->cfg->C('key'));
$this->reqHandler->setSignType($sign_type);
} else if ($sign_type == 'RSA_1_1' || $sign_type == 'RSA_1_256') {
$this->reqHandler->setRSAKey($this->cfg->C('private_rsa_key'));
$this->resHandler->setRSAKey($this->cfg->C('public_rsa_key'));
$this->reqHandler->setSignType($sign_type);
}
}
/* ------------------------------------------------- 新增内容 start ------------------------------------------------- */
/**
* 图片上传 2020-3-14 By Ken (http://ken.01h.net/) QQ:2480990710
*/
public function picUpload($path){
$post_data['partner'] = $this->cfg->C('sign_agentno');//合作伙伴ID即机构号
$post_data['serviceName'] = 'pic_upload';//服务名称
$post_data['signType'] = $this->cfg->C('sign_type');//签名类型
$post_data['data'] = '';//请求数据
//签名
$signPars = "";
ksort($post_data);
foreach($post_data as $k => $v) {
if("" != $v && "dataSign" != $k && "signType" != $k) {
$signPars .= $k . "=" . $v . "&";
}
}
$signPars = substr($signPars, 0, -1) . $this->reqHandler->getKey();
$post_data['dataSign'] = strtolower(md5($signPars));
//图片
if(substr(PHP_VERSION, 0, 3)<5.5){ //PHP5.5以下版本
$post_data['picFile'] = '@'.$path;
}else{ //PHP5.5及以上版本
$post_data['picFile'] = new CURLFile($path);
}
$this->pay->setReqContent($this->cfg->C('up_url'), $post_data);
if($this->pay->call()){
$res = json_decode(json_encode(simplexml_load_string($this->pay->getResContent(), 'SimpleXMLElement', LIBXML_NOCDATA)), true); //将XML转为array
if($res['isSuccess'] == 'T'){ //成功
return $res['pic'];
}else{
return array('status'=>500,'msg'=>'Error Code:'.$res['errorCode'].' Error Message:'.$res['errorMsg']);
}
}else{
return array('status'=>500,'msg'=>'Response Code:'.$this->pay->getResponseCode().' Error Info:'.$this->pay->getErrInfo());
}
}
/**
* 小微商户进件 2020-3-14 By Ken (http://ken.01h.net/) QQ:2480990710
*/
public function smallMchAdd($merchant){ //merchantName 、 outMerchantId 、 chPayAuth 、 limitCreditPay 、 merchantDetail['merchantShortName'] \ ['industrId'] \ ['province'] \ ['city'] \ ['county'] \ ['address'] \ ['email'] \ ['customerPhone'] \ ['principal'] \ ['principalMobile'] \ ['idCode'] \ ['indentityPhoto'] 、 bankAccount['accountCode'] \ ['bankId'] \ ['accountName'] \ ['accountType'] \ ['contactLine'] \ ['bankName'] \ ['province'] \ ['city'] \ ['idCardType'] \ ['idCard'] \ ['tel'] 、 mchPayConfs[0]['nodename'] \ ['payTypeId'] \ ['billRate'] 、 mchPayConfs[1]['nodename'] \ ['payTypeId'] \ ['billRate'] 、 mchPayConfs[2]['nodename'] \ ['payTypeId'] \ ['billRate'] \ ['billRate1'] ……
$post_data['partner'] = $this->cfg->C('sign_agentno');//合作伙伴ID即机构号
$post_data['serviceName'] = 'small_mch_add';//服务名称
$post_data['signType'] = $this->cfg->C('sign_type');//签名类型
//数组转XML
$merchant_xml = simplexml_load_string('<merchant />');
$this->create_xml($merchant, $merchant_xml);
$data = $merchant_xml->saveXML();
$post_data['data'] = str_replace('<?xml version="1.0"?>', '', $data);//请求数据
//签名
$signPars = "";
ksort($post_data);
foreach($post_data as $k => $v) {
if("" != $v && "dataSign" != $k && "signType" != $k) {
$signPars .= $k . "=" . $v . "&";
}
}
$signPars = substr($signPars, 0, -1) . $this->reqHandler->getKey();
$post_data['dataSign'] = strtolower(md5($signPars));
//组装请求串
$o = "";
foreach ($post_data as $k => $v) {
$o.= "$k=" . urlencode($v) . "&";
}
$post_data = substr($o, 0, -1);
$this->pay->setReqContent($this->cfg->C('up_url'), $post_data);
if($this->pay->call()){
$res = json_decode(json_encode(simplexml_load_string($this->pay->getResContent(), 'SimpleXMLElement', LIBXML_NOCDATA)), true); //将XML转为array
if($res['isSuccess'] == 'T'){ //成功
return $res['merchant'];
}else{
return array('status'=>500,'msg'=>'Error Code:'.$res['errorCode'].' Error Message:'.$res['errorMsg']);
}
}else{
return array('status'=>500,'msg'=>'Response Code:'.$this->pay->getResponseCode().' Error Info:'.$this->pay->getErrInfo());
}
}
private function create_xml($arr, $xml) {
foreach($arr as $k=>$v) {
if(is_array($v)) { //数组
if(array_keys($v) !== range(0, count($v)-1)) { //关联数组
$x = $xml->addChild($k);
$this->create_xml($v, $x);
} else { //索引数组
$x = $xml->addChild($k);
foreach ($v as $vv) {
$y = $x->addChild($vv['nodename']);
unset($vv['nodename']);
$this->create_xml($vv, $y);
}
}
} else {
$xml->addChild($k, $v);
}
}
}
/* ------------------------------------------------- 新增内容 end ------------------------------------------------- */
/**
* 提交订单
*/
public function submitOrderInfo($info){
}
?>
调用示例如下:
<?php
//调取接口
include './request.php';
$req = new Request();
//上传身份证图片
$indentityPhoto = array();
$card_front = $req->picUpload(dirname(__FILE__).'/upload/card_front.png');
$indentityPhoto[] = $card_front;
$card_back = $req->picUpload(dirname(__FILE__).'/upload/card_back.png');
$indentityPhoto[] = $card_back;
//上传收款银行卡照片
$accountCodePhoto = $req->picUpload(dirname(__FILE__).'/upload/bankPhoto.png');
//上传门头照
$mainPhoto = $req->picUpload(dirname(__FILE__).'/upload/shopPhoto.png');
//商户信息
$info = array();
//商户基本信息
$info['merchantName'] = '商户_张三'; //商户名称
$info['outMerchantId'] = 'UP_' . date('YmdHis') . rand(10, 99); //外商户号
$info['chPayAuth'] = '1'; //授权机构交易
$info['limitCreditPay'] = '2'; //是否可用信用卡支付, 0:是 1:否 2:不限制
//商户详情信息
$info['merchantDetail']['merchantShortName'] = $info['merchantName']; //商户简称
$info['merchantDetail']['industrId'] = '5331'; //行业类别: 5331 杂货便利店
$info['merchantDetail']['province'] = '3900'; //省份: 3900 福建
$info['merchantDetail']['city'] = '3930'; //城市: 3930 厦门
$info['merchantDetail']['county'] = '3933'; //区县: 3933 湖里
$info['merchantDetail']['address'] = '高新软件园华骏国际大厦七楼702单元'; //地址
$info['merchantDetail']['email'] = '2480990710@qq.com'; //邮箱
$info['merchantDetail']['customerPhone'] = '13600010002'; //客服电话
$info['merchantDetail']['principal'] = '张三'; //负责人
$info['merchantDetail']['principalMobile'] = '13600010002'; //负责人手机号
$info['merchantDetail']['idCode'] = '350604198705281012'; //证件号码
$info['merchantDetail']['indentityPhoto'] = implode(';', $indentityPhoto); //身份证图片,多张图片以分号;隔开
$info['merchantDetail']['accountCodePhoto'] = $accountCodePhoto; //收款银行卡照片
$info['merchantDetail']['mainPhoto'] = $mainPhoto; //门头照
//银行账户信息
$info['bankAccount']['accountCode'] = '6222021402018746261'; //银行卡号
$info['bankAccount']['bankId'] = '1'; //开户银行名编号
$info['bankAccount']['accountName'] = '张三'; //开户人
$info['bankAccount']['accountType'] = '1'; //帐户类型 1:个人
$info['bankAccount']['contactLine'] = '102100099996'; //联行号
$info['bankAccount']['bankName'] = '中国工商银行厦门支行'; //开户支行名称
$info['bankAccount']['province'] = '3900'; //开户支行所在省
$info['bankAccount']['city'] = '3930'; //开户支行所在市
$info['bankAccount']['idCardType'] = '1'; //持卡人证件类型 1:身份证
$info['bankAccount']['idCard'] = '350604198705281012'; //持卡人证件号码
$info['bankAccount']['tel'] = '13600010002'; //银行账户手机号
//商户支付类型信息
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10014751', 'billRate'=>'3.8'); //支付宝
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10014761', 'billRate'=>'3.8');
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10014771', 'billRate'=>'3.8');
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10002016', 'billRate'=>'6', 'billRate1'=>'6', 'billRate2'=>'6', 'billRate3'=>'6'); //云闪付
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10000973', 'billRate'=>'6', 'billRate1'=>'6', 'billRate2'=>'6', 'billRate3'=>'6');
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10000974', 'billRate'=>'6', 'billRate1'=>'6', 'billRate2'=>'6', 'billRate3'=>'6');
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10000959', 'billRate'=>'3.8'); //微信
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10000960', 'billRate'=>'3.8');
$info['mchPayConfs'][] = array('nodename'=>'mchPayConf', 'payTypeId'=>'10000961', 'billRate'=>'3.8');
//发送请求
$result = $req->smallMchAdd($info);
if($result['merchantId']){ //进件成功
//
}else{
//
}
?>