垃圾堆中的精品

垃圾堆中的精品

啦啦外卖添加计为付支付插件

最近遇到需要将另外一个支付对接到啦啦外卖,开始直接修改了原有的微信支付,但是后面想想还是做成插件方便点,也不会影响原有的支付功能,完全外挂插件

下面是成品效果

插件延续了之前人人的插件,最大程度减小对原有系统的影响

下面是修改记录(只添加注释内容)

/inc/wxapp/system/paycenter/pay.inc.php 文件添加微信支付

} else {
	$payment = get_available_payment($type, $order['sid'], true, $order['order_type']);
}

// 计为付支付 BY 还俗二师兄 2025年11月3日 02:26:27 START
mload()->model('plugin');
if(check_plugin_exist('jiweipay')) {
	$_W['_plugin']['name'] = 'jiweipay';
    pload()->classs($_W['_plugin']['name']);
    $jiweipay = new jiweipay();
	$payment = $jiweipay->getPayments($payment);
	$pay_type = !empty($_GPC['pay_type']) ? trim($_GPC['pay_type']) : $order['pay_type'];
	if($pay_type && !$_GPC['type'] && strexists($pay_type, $_W['_plugin']['name'].'_')){
	    $ret = $jiweipay->pay($params);
	    is_error($ret) && imessage($ret, '', 'ajax');
    	$ret['wheel_url'] = '';
    	if($type == 'takeout' && check_plugin_perm('wheel')) {
    		mload()->model('plugin');
    		pload()->model('wheel');
    		$ret['wheel_url'] = get_wheel_url(array('order_id' => $record['order_id'], 'ochannel' => $_W['ochannel']));
    	}
		imessage(array_merge(error(0, $ret), ['pay_type'=>"wechat"]), '', 'ajax');
	}
}
// 计为付支付 BY 还俗二师兄 2025年11月3日 02:26:27  END 
PHP

/model/order.mod.php 文件 order_pay_types 方法内返回前添加支付方式

// 计为付支付方式 BY 还俗二师兄 2025年11月3日 02:26:27 START
mload()->model('plugin');
if(check_plugin_exist('jiweipay')) {
	global $_W;
	$_W['_plugin']['name'] = 'jiweipay';
	pload()->classs($_W['_plugin']['name']);
	$pay_types = (new jiweipay())->getPayTypes($pay_types);
}
// 计为付支付方式 BY 还俗二师兄 2025年11月3日 02:26:27  END 
PHP

/model/order.mod.php 文件 order_begin_payrefund 方法内返回前添加退款申请

// 计为付退款申请 BY 还俗二师兄 2025年11月5日 02:26:27 START
if (strexists($refund["pay_type"], "jw-")) {
	mload()->model('plugin');
	if(check_plugin_exist('jiweipay')) {
		$_W['_plugin']['name'] = 'jiweipay';
		pload()->classs($_W['_plugin']['name']);
		$params = [
			'ordersn' => $refund["out_trade_no"],
			'mchRefundNo' => $refund["out_refund_no"],
			'refundAmount' => $refund_fee,
			'refundReason' => $refund["reason"],
		];
		$response = (new jiweipay())->refund($params);
		if (is_error($response)) {
			return error(-1, $response["message"]);
		}
		pdo_update('tiny_wmall_order_refund', array('status' => 2, 'handle_time' => TIMESTAMP), array('uniacid' => $_W["uniacid"], "id" => $refund["id"]));
		set_order_refund_status($refund["order_id"], 2);
		order_insert_refund_log($refund["order_id"], $refund["id"], "handle");
		$query = order_query_payrefund($refund["id"]);
		return $query;
	}
}
// 计为付退款申请 BY 还俗二师兄 2025年11月5日 02:26:27  END 
PHP

/model/order.mod.php 文件 order_query_payrefund 方法内返回前添加退款查询

// 计为付退款查询 BY 还俗二师兄 2025年11月5日 02:26:27 START
if (strexists($refund["pay_type"], "jw-")) {
	mload()->model('plugin');
	if(check_plugin_exist('jiweipay')) {
		$_W['_plugin']['name'] = 'jiweipay';
		pload()->classs($_W['_plugin']['name']);
		$jiweipay = new jiweipay();
		$response = $jiweipay->refundQuery($refund["out_refund_no"]);
		if (is_error($response)) {
			return error(-1, $response["message"]);
		}
		return $jiweipay->refundNotify($refund['out_refund_no'], $response['state']);
	}
}
// 计为付退款查询 BY 还俗二师兄 2025年11月5日 02:26:27  END 
PHP

/model/store.extra.mod.php 文件 store_getcash_update 方法中 if ($log[“channel”] == “bank”) 条件下添加退款到银行卡

if ($log["channel"] == "bank") {
	
	// 计为付商户提现 BY 还俗二师兄 2025年11月5日 02:26:27 START
	mload()->model('plugin');
	if(check_plugin_exist('jiweipay')) {
		$_W['_plugin']['name'] = 'jiweipay';
		pload()->classs($_W['_plugin']['name']);
		$params = [
			'mchOrderNo' => $log["trade_no"],
			'accountNo' => $log["account"]["account"],
			'accountName' => $log["account"]["realname"],
			'bankName' => $log["account"]["title"],
			'amount' => $amount,
			"transferDesc" => (string) $store["title"] . date("Y-m-d H:i", $log["addtime"]) . "提现申请",
		];
		$response = (new jiweipay())->transfer($params);
		if (is_error($response)) {
			pdo_update("tiny_wmall_store_getcash_log", array("status" => 2), array("id" => $log["id"]));
			mlog(2007, $log["id"], "打款未成功。详细错误信息:" . $response["message"]);
			return error(-1, "打款未成功,等待管理员审核。详细错误信息:" . $response["message"]);
		}
		$update = array("status" => 1, "endtime" => TIMESTAMP, "toaccount_status" => 1);
		pdo_update('tiny_wmall_store_getcash_log', $update, array("uniacid" => $_W["uniacid"], "id" => $log["id"]));
		store_getcash_notice($log["sid"], $log["id"], "success");
		mlog(2007, $log["id"], "打款成功");
		return error(0, '打款成功');
	}
	// 计为付商户提现 BY 还俗二师兄 2025年11月5日 02:26:27  END 
	
PHP

/model/store.extra.mod.php 文件 $type == “query” 条件下添加退款到银行卡查询操作

if ($log["toaccount_status"] == 3) {
	return error(-1, "该提现已失败,请联系商户处理");
}

// 计为付商户提现查询 BY 还俗二师兄 2025年11月5日 02:26:27 START
mload()->model('plugin');
if(check_plugin_exist('jiweipay')) {
	$_W['_plugin']['name'] = 'jiweipay';
	pload()->classs($_W['_plugin']['name']);
	$jiweipay = new jiweipay();
	$response = $jiweipay->transferQuery($log["trade_no"]);
	if (is_error($response)) {
		return $response;
	}
	return $jiweipay->transferNotify($log["trade_no"], $response['state']);
}
// 计为付商户提现查询 BY 还俗二师兄 2025年11月5日 02:26:27  END 

$params = array("partner_trade_no" => $log["trade_no"]);
PHP

接下来是小程序端,这个简单,在文件 pages/public/pay.wxml 中的 <radio-group name=”pay_type” bindchange=”onSelectPayType”> 下的循环中添加图片和样式即可

<view class="radio-text">
	...
	<view class="tips" wx:if="{{item.desc}}">{{item.desc}}</view>
</view>
<view class="radio-logo">
	...
	<image src="{{item.thumb}}" wx:if="{{item.thumb}}"></image>
</view>
Vue

然后上传插件代码(文章末尾)到目录/plugin下后浏览器登录后台,然后数据库执行下面的SQL语句添加插件和订单表

--
-- 系统插件中添加计为付支付
--
INSERT INTO `dx_tiny_wmall_plugin` (`name`, `type`, `title`, `thumb`, `version`, `ability`, `status`, `is_show`, `displayorder`) VALUES ('jiweipaytest', 'biz', '计为付支付', '../addons/we7_wmall/plugin/jiweipay/static/img/jiweipay.png', '1.0', '计为付支付', 1, 1, 0);
--
-- 添加计为付订单表
--
CREATE TABLE `dx_tiny_wmall_jiweipay_payorder` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `uniacid` int(10) NOT NULL DEFAULT '0' COMMENT '所属帐号',
  `openid` varchar(126) NOT NULL DEFAULT '' COMMENT 'OPENID',
  `ordersn` varchar(255) NOT NULL DEFAULT '' COMMENT '订单号',
  `type` varchar(120) NOT NULL DEFAULT '' COMMENT '订单类型',
  `mchNo` varchar(120) NOT NULL DEFAULT '' COMMENT '商户号',
  `appId` varchar(120) NOT NULL DEFAULT '' COMMENT 'APPID',
  `wayCode` varchar(50) NOT NULL DEFAULT 'WX_LITE' COMMENT '支付方式',
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '支付金额',
  `payTime` bigint(16) DEFAULT NULL COMMENT '支付时间',
  `mchOrderNo` varchar(255) NOT NULL DEFAULT '' COMMENT '商户单号',
  `payOrderId` varchar(255) NOT NULL DEFAULT '' COMMENT '支付系统单号',
  `channelOrderNo` varchar(255) NOT NULL DEFAULT '' COMMENT '渠道单号',
  `isrefund` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否退款',
  `mchRefundNo` varchar(255) NOT NULL DEFAULT '0' COMMENT '退款单号',
  `refundAmount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '退款金额',
  `refundReason` varchar(255) NOT NULL DEFAULT '' COMMENT '退款原因',
  `refundOrderId` varchar(255) NOT NULL DEFAULT '' COMMENT '退款订单号',
  `refundChannelOrderNo` varchar(255) NOT NULL DEFAULT '' COMMENT '渠道退款单号',
  `refundTime` bigint(16) DEFAULT NULL COMMENT '退款时间',
  `refundState` varchar(120) NOT NULL DEFAULT '' COMMENT '退款状态',
  `payNotify` text COMMENT '支付回调',
  `refundNotify` text COMMENT '退款回调',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='计为付支付-订单表' AUTO_INCREMENT=1;
SQL

到此就可以直接查看效果,并访问测试了

最后不过此代码只实现了小程序支付(含退款)、商户提现功能,其他并未实现,不过参照上面的代码,应该可以很方便实现其他功能。并且如果要添加其他支付,也可以参照此插件实现。

输入密码后下载插件

该部分内容为密码保护,请联系QQ505097558获取访问密码

评论回复

回到顶部