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跳转自有小程序,分账模式支付方式。 立即申请', // 插件描述(支持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'; } } ?>