vr-shopxo-plugin/shopxo/extend/payment/AllinpayWeixinMiniCashier.php

274 lines
9.1 KiB
PHP
Raw Permalink 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\allinpay\service\PaymentHandleService;
/**
* 通联支付分账 - 微信小程序收银台
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-11-14
* @desc description
*/
class AllinpayWeixinMiniCashier
{
// 插件配置参数
private $config;
/**
* 构造方法
* @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' => '通联支付分账-微信小程序收银台', // 插件名称
'version' => '1.0.0', // 插件版本
'apply_version' => '不限', // 适用系统版本描述
'apply_terminal'=> ['ios', 'android'], // 适用终端 默认全部 ['pc', 'h5', 'app', 'alipay', 'weixin', 'baidu']
'desc' => '适用APP跳转到微信APP小程序收银台支付分账模式支付方式。 <a href="https://www.chinaums.com/" target="_blank">立即申请</a>', // 插件描述支持html
'author' => 'Devil', // 开发者
'author_url' => 'http://shopxo.net/', // 开发者主页
];
// 配置信息
$element = [
[
'element' => 'input',
'type' => 'text',
'name' => 'appid',
'title' => '小程序appid',
'desc' => '默认取系统配置的微信小程序appid',
'placeholder' => '小程序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' => '明文schem方式环境版本',
'message' => '请选择明文schem方式环境版本',
'name' => 'env_version',
'element_data' => [
['value'=>'release', 'name'=>'正式版本'],
['value'=>'trial', 'name'=>'体验版本'],
['value'=>'develop', 'name'=>'开发版本'],
],
],
[
'element' => 'select',
'title' => '小程序采用收银台方式',
'message' => '请选择小程序采用收银台方式',
'name' => 'is_to_mini_cashier',
'is_multiple' => 0,
'element_data' => [
['value'=>0, 'name'=>'否'],
['value'=>1, '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_allinpay_weixin_mini_cashier_pay_data_'.$params['order_no'];
// 没有openid则跳转到小程序
if(empty($params['weixin_openid']))
{
// 小程序采用收银台方式
$params['is_to_mini_cashier'] = (isset($this->config['is_to_mini_cashier']) && $this->config['is_to_mini_cashier'] == 1) ? 1 : 0;
// 存储支付数据
MyCache($key, $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=allinpay';
if($is_weixinapp_type == 1)
{
// 跳转支付 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;
}
return DataReturn('success', 0, $url);
}
// 获取支付数据
$cache_res = MyCache($key);
if(empty($cache_res))
{
return DataReturn('支付数据丢失,请重新发起支付!', -1);
}
// 调用支付处理
$cache_res['weixin_openid'] = $params['weixin_openid'];
$cache_res['is_cashier'] = 1;
return PaymentHandleService::Pay('weixin', $cache_res);
}
/**
* 支付回调处理
* @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;
}
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;
}
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\allinpay\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 'error';
}
}
?>