Files
ZangShiQi/addon/wechatpay/model/Config.php
2026-04-04 17:27:12 +08:00

340 lines
13 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\wechatpay\model;
use app\model\system\Config as ConfigModel;
use app\model\BaseModel;
/**
* 微信支付配置
* 版本 1.0.4
*/
class Config extends BaseModel
{
private $encrypt = '******';
/**
* 设置支付配置
* @param $data
* @param int $site_id
* @param string $app_module
* @return array
*/
public function setPayConfig($data, $site_id = 0, $app_module = 'shop')
{
$config = new ConfigModel();
// 未加密前的数据
$original_config = $this->getPayConfig($site_id)['data']['value'];
// 检测数据是否发生变化,如果没有变化,则保持未加密前的数据
if (!empty($data['pay_signkey']) && $data['pay_signkey'] == $this->encrypt) {
$data['pay_signkey'] = $original_config['pay_signkey']; // APIv2密钥
}
if (!empty($data['apiclient_cert']) && $data['apiclient_cert'] == $this->encrypt) {
$data['apiclient_cert'] = $original_config['apiclient_cert']; // 支付证书cert
}
if (!empty($data['apiclient_key']) && $data['apiclient_key'] == $this->encrypt) {
$data['apiclient_key'] = $original_config['apiclient_key']; // 支付证书key
}
if (!empty($data['plateform_cert']) && $data['plateform_cert'] == $this->encrypt) {
$data['plateform_cert'] = $original_config['plateform_cert']; // 平台证书 生成的
}
if (!empty($data['plateform_certificate']) && $data['plateform_certificate'] == $this->encrypt) {
$data['plateform_certificate'] = $original_config['plateform_certificate']; // 平台证书 主动上传的
}
if (!empty($data['plateform_certificate_serial']) && $data['plateform_certificate_serial'] == $this->encrypt) {
$data['plateform_certificate_serial'] = $original_config['plateform_certificate_serial']; // 平台证书序列号
}
if (!empty($data['v3_pay_signkey']) && $data['v3_pay_signkey'] == $this->encrypt) {
$data['v3_pay_signkey'] = $original_config['v3_pay_signkey']; // APIv3密钥
}
if(!($data['transfer_status'] == 1 && $data['transfer_type'] == 'v3' && $data['transfer_v3_type'] == self::TRANSFER_V3_TYPE_USER)){
$data['member_transfer_scene'] = '';
$data['store_transfer_scene'] = '';
$data['fenxiao_transfer_scene'] = '';
$data['member_transfer_code'] = '';
$data['store_transfer_code'] = '';
$data['fenxiao_transfer_code'] = '';
$data['member_transfer_info'] = [];
$data['fenxiao_transfer_info'] = [];
$data['store_transfer_info'] = [];
$data['member_transfer_recv'] = '';
$data['store_transfer_recv'] = '';
$data['fenxiao_transfer_recv'] = '';
}
$res = $config->setConfig($data, '微信支付配置', 1, [['site_id', '=', $site_id], ['app_module', '=', $app_module], ['config_key', '=', 'WECHAT_PAY_CONFIG']]);
return $res;
}
/**
* 获取支付配置
* @param int $site_id
* @param string $app_module
* @param bool $need_encrypt 是否需要加密数据true加密、false不加密
* @return array
*/
public function getPayConfig($site_id = 0, $app_module = 'shop', $need_encrypt = false)
{
$config = new ConfigModel();
$res = $config->getConfig([['site_id', '=', $site_id], ['app_module', '=', $app_module], ['config_key', '=', 'WECHAT_PAY_CONFIG']]);
//旧定义字段变为新定义字段
$res['data']['value'] = json_encode($res['data']['value']);
$res['data']['value'] = str_replace('member_transfer', 'member_withdraw', $res['data']['value']);
$res['data']['value'] = str_replace('store_transfer', 'store_withdraw', $res['data']['value']);
$res['data']['value'] = str_replace('fenxiao_transfer', 'fenxiao_withdraw', $res['data']['value']);
$res['data']['value'] = json_decode($res['data']['value'], true);
$res['data']['value'] = array_merge([
"appid" => '',
"mch_id" => '',
"pay_signkey" => '',
"apiclient_cert" => '',
"apiclient_key" => '',
"refund_status" => 0,
"pay_status" => 0,
"transfer_status" => 0,
'transfer_type' => 'v2',
'plateform_cert' => '',
'plateform_certificate' => '',
'plateform_certificate_serial' => '',
'api_type' => 'v2',
'v3_pay_signkey' => '',
'transfer_v3_type'=>'1',//旧版1 新版2
'member_withdraw_scene'=>'',
'store_withdraw_scene'=>'',
'fenxiao_withdraw_scene'=>'',
'member_withdraw_code'=>'',
'store_withdraw_code'=>'',
'fenxiao_withdraw_code'=>'',
'member_withdraw_info' => [],
'fenxiao_withdraw_info'=> [],
'store_withdraw_info' => [],
'member_withdraw_recv'=>'',
'store_withdraw_recv'=>'',
'fenxiao_withdraw_recv'=>'',
], $res['data']['value']);
// 加密敏感信息
if (!empty($res['data']['value']) && $need_encrypt) {
if (!empty($res['data']['value']['pay_signkey'])) {
$res['data']['value']['pay_signkey'] = $this->encrypt; // APIv2密钥
}
if (!empty($res['data']['value']['apiclient_cert'])) {
$res['data']['value']['apiclient_cert'] = $this->encrypt; // 支付证书cert
}
if (!empty($res['data']['value']['apiclient_key'])) {
$res['data']['value']['apiclient_key'] = $this->encrypt; // 支付证书key
}
if (!empty($res['data']['value']['plateform_cert'])) {
$res['data']['value']['plateform_cert'] = $this->encrypt; // 平台证书 通过接口获取和生成的
}
if (!empty($res['data']['value']['plateform_certificate'])) {
$res['data']['value']['plateform_certificate'] = $this->encrypt; // 平台证书,直接上传的
}
if (!empty($res['data']['value']['plateform_certificate_serial'])) {
$res['data']['value']['plateform_certificate_serial'] = $this->encrypt; // 平台证书ID
}
if (!empty($res['data']['value']['v3_pay_signkey'])) {
$res['data']['value']['v3_pay_signkey'] = $this->encrypt; // APIv3密钥
}
}
return $res;
}
CONST TRANSFER_V3_TYPE_SHOP = 1; //商户转账
CONST TRANSFER_V3_TYPE_USER = 2; //会员收款
public function getTransferSceneConfig()
{
$config = [
[
'num'=>1,
'title' => '现金营销',
'infos' => [
[
'info_type' => '活动名称',
'info_content' => ''
],
[
'info_type' => '奖励说明',
'info_content' => '',
],
],
'user_recv'=>[
'活动奖励',
'现金奖励'
]
],
[
'num'=>2,
'title' => '企业赔付',
'infos' => [
[
'info_type' => '赔付原因',
'info_content' => ''
],
],
'user_recv'=>[
'退款',
'商家赔付'
]
],
[
'num'=>3,
'title' => '佣金报酬',
'infos' => [
[
'info_type' => '岗位类型',
'info_content' => ''
],
[
'info_type' => '报酬说明',
'info_content' => '',
],
],
'user_recv'=>[
'劳务报酬',
'报销款',
'企业补贴',
'开工利是',
]
],
[
'num'=>4,
'title' => '采购货款',
'infos' => [
[
'info_type' => '采购商品名称',
'info_content' => ''
],
],
'user_recv'=>[
'货款',
]
],
[
'num'=>5,
'title' => '二手回收',
'infos' => [
[
'info_type' => '回收商品名称',
'info_content' => ''
],
],
'user_recv'=>[
'二手回收货款',
]
],
[
'num'=>6,
'title' => '公益补助',
'infos' => [
[
'info_type' => '公益活动名称',
'info_content' => ''
],
[
'info_type' => '公益活动备案编号',
'info_content' => ''
],
],
'user_recv'=>[
'公益补助金',
]
],
[
'num'=>7,
'title' => '行政补贴',
'infos' => [
[
'info_type' => '补贴类型',
'info_content' => ''
],
],
'user_recv'=>[
'行政补贴',
'行政奖励',
]
],
[
'num'=>8,
'title' => '保险理赔',
'infos' => [
[
'info_type' => '保险产品备案编号',
'info_content' => ''
],
[
'info_type' => '保险名称',
'info_content' => ''
],
[
'info_type' => '保险操作单号',
'info_content' => ''
],
],
'user_recv'=>[
'保险理赔款',
]
]
];
$data = [];
foreach ($config as $k=>$v){
$data[$v['num']] = $v;
}
return $data;
}
public function getTransferSceneInfo($param){
$data = [
'member_withdraw_info'=>[],
'fenxiao_withdraw_info'=>[],
'store_withdraw_info'=>[]
];
if(!isset($param['transfer_v3_type']) || $param['transfer_v3_type'] !=2){
return $data;
}
$config = $this->getTransferSceneConfig();
//会员提现场景
if(!empty($param['member_withdraw_scene'])){
foreach($config[$param['member_withdraw_scene']]['infos'] as $k=>$v){
$v['info_content'] = $param['member_withdraw_'.$k] ?? '';
$data['member_withdraw_info'][$k] = $v;
}
}
//分销提现场景
if(!empty($param['fenxiao_withdraw_scene'])){
foreach($config[$param['fenxiao_withdraw_scene']]['infos'] as $k=>$v){
$v['info_content'] = $param['fenxiao_withdraw_'.$k] ?? '';
$data['fenxiao_withdraw_info'][$k] = $v;
}
}
//店铺提现场景
if(!empty($param['store_withdraw_scene'])){
foreach($config[$param['store_withdraw_scene']]['infos'] as $k=>$v){
$v['info_content'] = $param['store_withdraw_'.$k] ?? '';
$data['store_withdraw_info'][$k] = $v;
}
}
return $data;
}
}