vr-shopxo-plugin/shopxo/extend/payment/ChinaumsAllocationWeixinH5S...

280 lines
9.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace payment;
use app\service\AppMiniUserService;
use app\plugins\allocation\service\PaymentHandleService;
/**
* 银联分账 - 微信H5跳转自有小程序
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-11-14
* @desc description
*/
class ChinaumsAllocationWeixinH5SelfMini
{
// 插件配置参数
private $config;
// 机构商户号
public static $inst_mid = 'MINIDEFAULT';
/**
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-17
* @desc description
* @param [array] $params [输入参数(支付配置参数)]
*/
public function __construct($params = [])
{
$this->config = $params;
}
/**
* 配置信息
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
*/
public function Config()
{
// 基础信息
$base = [
'name' => '银联分账-微信H5跳转自有小程序', // 插件名称
'version' => '1.0.0', // 插件版本
'apply_version' => '不限', // 适用系统版本描述
'apply_terminal'=> ['pc', 'h5', 'ios', 'android'], // 适用终端 默认全部 ['pc', 'h5', 'app', 'alipay', 'weixin', 'baidu']
'desc' => '适用微信H5跳转自有小程序分账模式支付方式。 <a href="https://www.chinaums.com/" target="_blank">立即申请</a>', // 插件描述支持html
'author' => 'Devil', // 开发者
'author_url' => 'http://shopxo.net/', // 开发者主页
];
// 配置信息
$element = [
[
'element' => 'input',
'type' => 'text',
'name' => 'appid',
'placeholder' => '小程序appid',
'title' => '小程序appid',
'message' => '请填写小程序appid',
],
[
'element' => 'input',
'type' => 'text',
'name' => 'path',
'title' => '小程序页面路径',
'desc' => '默认 银联支付分账插件收银台地址',
'placeholder' => '小程序页面路径',
'message' => '请填写小程序页面路径',
],
[
'element' => 'select',
'title' => '打开微信APP小程序方式',
'message' => '请选择打开微信APP小程序方式',
'name' => 'is_weixinapp_type',
'is_multiple' => 0,
'element_data' => [
['value'=>0, 'name'=>'原生方式'],
['value'=>1, 'name'=>'明文schem方式'],
],
],
[
'element' => 'select',
'title' => '环境版本',
'message' => '请选择环境版本',
'name' => 'env_version',
'element_data' => [
['value'=>'release', 'name'=>'正式版本'],
['value'=>'trial', 'name'=>'体验版本'],
['value'=>'develop', 'name'=>'开发版本'],
],
],
[
'element' => 'message',
'message' => '支付参数请在【银联支付分账】插件中配置',
],
];
return [
'base' => $base,
'element' => $element,
];
}
/**
* 支付入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
* @param [array] $params [输入参数]
*/
public function Pay($params = [])
{
// 配置参数验证
$p = [
[
'checked_type' => 'empty',
'key_name' => 'order_no',
'error_msg' => '支付单号为空',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
$key = 'cache_payment_chinaumsallocationweixinh5selfmini_pay_data_'.$params['order_no'];
// 没有openid则跳转到小程序
if(empty($params['weixin_openid']))
{
// 存储支付数据
MyCache($key, ['config'=>$this->config, 'params'=>$params]);
// 支付链接
$path = empty($this->config['path']) ? 'pages/cashier/cashier' : $this->config['path'];
$is_weixinapp_type = isset($this->config['is_weixinapp_type']) ? $this->config['is_weixinapp_type'] : 0;
$query = 'order_no='.$params['order_no'].'&plugins=allocation';
if($is_weixinapp_type == 1 || APPLICATION_CLIENT_TYPE == 'pc')
{
// 跳转支付 release 正式版本, trial 体验版本, develop 开发版本
$env_version = empty($this->config['env_version']) ? 'release' : $this->config['env_version'];
$appid = empty($this->config['appid']) ? AppMiniUserService::AppMiniConfig('common_app_mini_weixin_appid') : $this->config['appid'];
$url = 'weixin://dl/business/?appid='.$appid.'&path='.$path.'&query='.urlencode($query).'&env_version='.$env_version;
} else {
$url = 'weixinapp://'.$path.'?'.$query;
}
// h5端则直接返回跳转链接
if(APPLICATION_CLIENT_TYPE == 'pc')
{
// web端进去收银台页面
$pay_params = [
'url' => $url,
'order_no' => $params['order_no'],
'name' => '微信小程序支付',
'msg' => '正在支付中...',
'check_url' => $params['check_url'],
];
MySession('payment_qrcode_data', $pay_params);
return DataReturn('success', 0, PluginsHomeUrl('allocation', 'cashier', 'weixintominipay'));
}
return DataReturn('success', 0, $url);
}
// 获取支付数据
$cache_res = MyCache($key);
if(empty($cache_res))
{
return DataReturn('支付数据丢失,请重新发起支付!', -1);
}
$this->config = $cache_res['config'];
// 调用支付处理
$cache_res['params']['weixin_appid'] = $params['weixin_appid'];
$cache_res['params']['weixin_openid'] = $params['weixin_openid'];
$cache_res['params']['inst_mid'] = self::$inst_mid;
return PaymentHandleService::Pay('weixin-h5-self-mini', $cache_res['params']);
}
/**
* 支付回调处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-19
* @desc description
* @param [array] $params [输入参数]
*/
public function Respond($params = [])
{
$ret = $this->IsCall();
if($ret['code'] != 0)
{
return $ret;
}
$params['inst_mid'] = self::$inst_mid;
return PaymentHandleService::Respond($params);
}
/**
* 退款处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-05-28
* @desc description
* @param [array] $params [输入参数]
*/
public function Refund($params = [])
{
$ret = $this->IsCall();
if($ret['code'] != 0)
{
return $ret;
}
$params['inst_mid'] = self::$inst_mid;
return PaymentHandleService::Refund($params);
}
/**
* 是否可以调用
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-11-23
* @desc description
*/
public function IsCall()
{
$service_class = '\app\plugins\allocation\service\PaymentHandleService';
if(!class_exists($service_class))
{
return DataReturn('请先安装【分账系统】插件', -1);
}
return DataReturn('success', 0);
}
/**
* 自定义成功返回内容
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-01
* @desc description
*/
public function SuccessReturn()
{
return 'SUCCESS';
}
/**
* 自定义失败返回内容
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-01
* @desc description
*/
public function ErrorReturn()
{
return 'FAILED';
}
}
?>