<?php
/**
* 微信服务商V3
*/
class Wxpaymch
{
// 错误信息
private $error = '';
// 商户mchid
private $mch_id = 'xxxx';
// 商户API v3密钥(微信服务商-账户中心-API安全 api v3密钥 https://pay.weixin.qq.com/index.php/core/cert/api_cert)
private $mch_api_key = 'xxxx';
// 证书编号 (apiclient_cert.pem证书解析后获得)
private $serial_no = 'xxxx';
// 私钥 apiclient_key.pem(微信服务商-账户中心-API安全 自行下载 https://pay.weixin.qq.com/index.php/core/cert/api_cert)
private $mch_private_key = __DIR__ . DIRECTORY_SEPARATOR . 'cert' . DIRECTORY_SEPARATOR . 'apiclient_key.pem';
// 支付平台公钥(接口获取)
private $public_key_path = __DIR__ . DIRECTORY_SEPARATOR . 'cert_ficates_v3.pem';
/*
* 商户进件
*/
public function subApplyment( array $params)
{
// 参数准备
$data = [
//业务申请编号
'business_code' => $this->getBusinessCode(),
//超级管理员信息
'contact_info' => [
'contact_name' => $this->getEncrypt($params['contact_name']),//超级管理员姓名
'contact_id_number' => $this->getEncrypt($params['contact_id_number']),//超级管理员身份证件号码
'mobile_phone' => $this->getEncrypt($params['mobile_phone']),//联系手机
'contact_email' => $this->getEncrypt($params['contact_email']),//联系邮箱
],
//主体资料
'subject_info' => [
//主体类型SUBJECT_TYPE_INDIVIDUAL(个体户)SUBJECT_TYPE_ENTERPRISE(企业)SUBJECT_TYPE_INSTITUTIONS(党政、机关及事业单位)SUBJECT_TYPE_OTHERS(其他组织)
'subject_type' => 'SUBJECT_TYPE_INDIVIDUAL',
//经营者/法人身份证件
'identity_info' => [
'id_doc_type' => 'IDENTIFICATION_TYPE_IDCARD',//证件类型
'owner' => true,//经营者/法人是否为受益人
//身份证信息
'id_card_info' => [
'id_card_copy' => 'jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAxhBTEO_PvWkfSCJ3zVIn001D8daLC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ',
'id_card_national' => '47ZC6GC-vnrbEny__Ie_An5-tCpqxucuxi-vByf3Gjm7KE53JXvGy9tqZm2XAUf-4KGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4',
'id_card_name' => $this->getEncrypt($params['id_card_name']),
'id_card_number' => $this->getEncrypt($params['id_card_number']),
'card_period_begin' => '2026-06-06',
'card_period_end' => '2036-06-06',
],
],
],
//经营资料
'business_info' => [
'merchant_shortname' => $params['merchant_shortname'],
'service_phone' => $params['service_phone'],
'sales_info' => [
'sales_scenes_type' => ['SALES_SCENES_STORE'],
//线下门店场景
'biz_store_info' => [
'biz_store_name' => $params['biz_store_name'],
'biz_address_code' => $params['biz_address_code'],
'biz_store_address' => $params['biz_store_address'],
'store_entrance_pic' => ['0P3ng6KTIW4-QJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo'],
'indoor_pic' => ['0P3ng6KTIW4-Q_l2FjmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo'],
],
],
],
//结算规则
'settlement_info' => [
'settlement_id' => $params['settlement_id'],
'qualification_type' => $params['qualification_type'],
'activities_id' => $params['activities_id'],
'activities_rate' => $params['activities_rate'],
],
//结算银行账户
'bank_account_info' => [
'bank_account_type' => 'BANK_ACCOUNT_TYPE_CORPORATE',
'account_name' => $this->getEncrypt($params['account_name']),
'account_bank' => $params['account_bank'],
'bank_address_code' => $params['bank_address_code'],
'bank_name' => $params['bank_name'],
'account_number' => $this->getEncrypt($params['account_number']),
],
//补充材料
'addition_info'=>[
'legal_person_commitment'=>$params['legal_person_commitment'],
'business_addition_pics'=>$params['business_addition_pics'],
],
];
$url = 'https://api.mch.weixin.qq.com/v3/applyment4sub/applyment/';
// 获取支付平台证书编码(也可以用接口中返回的serial_no 来源:https://api.mch.weixin.qq.com/v3/certificates)
$serial_no = $this->parseSerialNo($this->getCertFicates());
$bodyData = json_encode($data);
// 获取认证信息
$authorization = $this->getAuthorization($url, 'POST', $bodyData);
$header = [
'Content-Type:application/json',
'Accept:application/json',
'User-Agent:*/*',
'Authorization:' . $authorization,
'Wechatpay-Serial:' . $serial_no
];
$json = $this->getCurl('POST', $url, $bodyData, $header);
$data = json_decode($json, true);
if (isset($data['code']) && isset($data['message'])) {
$this->error = '[subApplyment]请求错误 code:' . $data['code'] . ' msg:' . $data['message'];
return false;
}
if (empty($applyment_id = $data['applyment_id'])) {
$this->error = '[subApplyment]返回错误';
return false;
}
return $applyment_id;
}
/**
* 进件查询
*/
public function queryApplyment($business_code)
{
$url = 'https://api.mch.weixin.qq.com/v3/applyment4sub/applyment/business_code/' . $business_code;
// 获取认证信息
$authorization = $this->getAuthorization($url);
$header = [
'Content-Type:application/json',
'Accept:application/json',
'User-Agent:*/*',
'Authorization:' . $authorization
];
$json = $this->getCurl('GET', $url, '', $header);
$data = json_decode($json, true);
if (isset($data['code']) && isset($data['message'])) {
$this->error = '[queryApplyment]请求错误 code:' . $data['code'] . ' msg:' . $data['message'];
return false;
}
return $data;
}
/**
* 上传文件
*/
public function mediaUpload()
{
// 上传图片
$filename = '1.png';
$filepath = __DIR__ . '/' . $filename;
if (!file_exists($filepath)) {
$this->error = '[mediaUpload]文件找不到';
}
$url = 'https://api.mch.weixin.qq.com/v3/merchant/media/upload';
$fi = new \finfo(FILEINFO_MIME_TYPE);
$mime_type = $fi->file($filepath);
$meta = [
'filename' => $filename,
'sha256' => hash_file('sha256', $filepath)
];
// 获取认证信息
$authorization = $this->getAuthorization($url, 'POST', json_encode($meta));
$boundary = uniqid();
$header = [
'Accept:application/json',
'User-Agent:*/*',
'Content-Type:multipart/form-data;boundary=' . $boundary,
'Authorization:' . $authorization
];
// 组合参数
$boundaryStr = "--{$boundary}\r\n";
$out = $boundaryStr;
$out
评论0