极致CMS帮助文档极致CMS帮助文档
首页
论坛
视频
加群
工具
GitHub
首页
论坛
视频
加群
工具
GitHub
  • 引言
  • 条款
  • 起步
  • 基础标签

    • 系统配置
    • 配置栏目
    • 栏目导航
    • 面包屑导航
    • 栏目列表
    • 单页
    • 文章内容页
    • 商品内容页
    • 点击量
    • 点赞
    • 收藏
    • 评论
    • 购买
    • 轮播图/幻灯片
    • 友情链接
    • 网站底部
    • 自定义字段
    • TAG
    • 内链
    • 碎片化
  • LOOP标签

    • 基本用法
    • 分页
    • 空数据
    • tid
    • like
    • notlike
    • limit
    • jzattr
    • day
    • table
    • sql
    • jzcache
    • notjz
  • Screen筛选
  • 功能标签
  • 极致模型函数
  • 自定义路由
  • 相关统计
  • 邮箱配置
  • 多语言支持
  • 搜索模块

    • 单模型搜索
    • 多模型搜索
    • 搜索结果页
  • 留言模块

    • 基本用法
    • 高级用法
    • 搜索结果页
  • 自定义模块
  • 模板制作

    • 准备工作
    • 网站栏目
    • 页面规划
    • 自定义函数
    • 模板信息
    • 客户权限
    • 桌面设置
    • 上线部署
  • 模板列表
  • 插件相关

    • 安装卸载
    • 控制器方法覆盖(简单)
    • 控制器方法钩子(高级)
    • 覆盖Common公共控制器
    • 极致CMS升级插件
    • 系统API接口插件
    • 数据库修复插件
    • 多语言建站
    • 模板助手插件
    • 阿里云短信注册插件
    • 独立静态网站插件
    • 云储存插件
    • Excel导入导出插件
    • 后台登录安全插件
    • 屏蔽IP插件
    • 在线编辑模板插件
    • 生成多尺寸缩略图插件
    • 火车头采集Web发布插件
    • 伪原创插件
    • 留言发送邮箱插件
    • 留言提交安全插件
    • QQ一键登录插件
    • Skycaiji蓝天采集API接口插件
    • 多域名绑定插件
    • 百度SEO推送
    • 百度百家推送
    • 极致插件示例
    • 栏目便捷工具
  • 支付相关

    • 支付宝支付
    • 微信支付
    • 立即支付
    • 接入第三方支付
  • 会员模块

    • 页面模板说明
    • 个人中心
    • 我的资料/修改密码
    • 我的关注
    • 我的粉丝
    • 我的投稿
    • 我的收藏
    • 我的喜欢
    • 我的评论
    • 我的钱包
    • 购买记录
    • 我的购物车
    • 订单管理
    • 消息设置
    • 公开页
    • 会员登录
    • 会员注册
    • 忘记密码
    • 微信登录
  • 微信小程序

    • 开始起步
    • 小程序开发
    • API接口
    • 轮播图/幻灯片
    • 获取栏目信息
    • 获取内容详情
    • 留言交互
  • Windows部署
  • 宝塔一键部署
  • 伪静态配置
  • 系统架构
  • 数据字典
  • 视频教程
  • 版本更新
  • Vue & App接入(v2.5.2+)

    • 验证码
    • 上传文件
    • 会员注册
    • 会员登录
    • 找回密码
    • 获取用户信息
    • 修改用户信息
    • 我的文章
    • 发布文章
    • 删除文章
    • 获取单篇文章信息
    • 我的收藏
    • 收藏/取消收藏
    • 是否收藏
    • 我的点赞
    • 点赞/取消点赞
    • 是否点赞
  • 常见问题

    • 如何判断首页,栏目页,详情页,单页?
    • 如何调用关联和相关文章内容?
    • 搜索超出设定范围如何解决?
    • 判断用户是否购买商品?
    • 判断会员分组?
    • 如何输出内容图片?
    • 如何判断自己是否适合使用极致CMS?
    • ajax数据交互,加载更多功能实现?
    • 如何实现后台录入时自定义检测重复内容的功能?
  • 附录

    • 时间格式
    • 富文本编辑器
    • 二维码生成
    • 验证码生成
    • 自定义后台主页
    • 客户端判断
    • classtypedata数据详解
    • 文章归档
    • RSS
    • 制作内容分页
    • 各种时间查询问题解决
    • 更换编辑器

其他第三方支付

这里指除支付宝微信官方支付渠道外的其他支付渠道,可以参考本文档进行完成。

案例指引

以 NewPay 支付为例,制作一个插件来完成系统支付。

支付场景

目前系统支付有购买商品支付和充值支付,那么只需要完成这两个场景下的方法接入即可。

创建支付类

新建一个文件 NewPayController.php ,放到 app/home/plugins 下面

将下面的代码复制进去

<?php

namespace app\home\plugins;

use app\home\c\CommonController;

class NewPayController extends CommonController
{

	function _init(){
	    parent::_init(); 
		
		//相关配置放到这个地方,请根据第三方支付文档进行配置
		$this->payconfig = [
		    'appid'=>'', 
		    'appsecret'=>''
		    ];
	    
	}
	
	
	
	/*
	
	主支付函数
	
	业务逻辑:
	用户前台选择了 NewPay 进行下单支付,然后系统创建订单,带着相关订单参数跳转到这个函数,进行支付
	
	构建支付链接:
	http://域名/newPay/pay?orderno=订单号&username=用户名&&tel=联系方式&email=联系邮箱&address=联系地址
	orderno为主要参数,其他参数可以不用,看前台表单填写情况而定
	*/
	function pay(){
		
		
			//保存提交信息
			$return_url = U('user/orderdetails',['orderno'=>$this->frparam('orderno',1)]);
			$w['orderno'] = $this->frparam('orderno',1);
			$w['receive_username'] = $this->frparam('username',1);
			$w['receive_tel'] = $this->frparam('tel',1);
			$w['receive_email'] = $this->frparam('email',1);
			$w['receive_address'] = $this->frparam('address',1);
			$paytype = $this->frparam('paytype',0,1);//默认支付宝支付1,2微信支付
			
			$order = M('orders')->find(['orderno'=>$w['orderno']]);
			if(!$order || !$w['orderno']){
				if($this->frparam('ajax')){
					
					JsonReturn(['code'=>1,'msg'=>'订单号不存在或已被删除!','url'=>$return_url]);
					
				}
				Error('订单号不存在或已被删除!',$return_url);
			}
		
			//保存信息
			$res = M('orders')->update(['id'=>$order['id']],$w);
			
			
			//此处开始进行配置第三方支付功能
			
			$orderno = $this->frparam('orderno',1);
			$payment = 'NewPay';
			$appid     = $this->payconfig['appid'];
			$appsecret = $this->payconfig['appsecret'];
			M('orders')->update(['id'=>$order['id']],['paytype'=>$payment]);
			
			$title = '支付订单:'.$orderno;
			//以下进行拼接支付信息,执行业务逻辑
			$data=array(
			
				'appid'     => $appid, //必须的,APPID
				'trade_order_id'=> $orderno, //必须的,网站订单ID,唯一的,匹配[a-zA-Z\d\-_]+
				'payment'   => $payment,//必须的,支付接口标识:wechat(微信接口)|alipay(支付宝接口)
				'total_fee' => $order['price'],//人民币,单位精确到分(测试账户只支持0.1元内付款)
				'title'     => $title, //必须的,订单标题,长度32或以内
				'time'      => time(),//必须的,当前时间戳,根据此字段判断订单请求是否已超时,防止第三方攻击服务器
			     //...
			);
			
			//进行编写业务逻辑
			
		
		
		
	}
	

    
   
	//支付查询,检查订单是否支付,可以自定义支付函数,此函数为示例代码
	function checkpay(){
		$orderno = $this->frparam('orderno',1);
	
		if(!$orderno){
			exit('链接错误!');
		}
		$order = M('orders')->find(['orderno'=>$orderno]);
		if(!$order){
			exit('未查询到此订单号!');
		}
		unset($order['userid']);
	    unset($order['jifen']);
	    unset($order['qianbao']);
	    unset($order['send_time']);
	    unset($order['tid']);
	    unset($order['discount']);
	    unset($order['yunfei']);
	    unset($order['username']);
	    unset($order['tel']);
		
		if($order['ispay']==1){
		   $this->overpay($orderno);exit;
		}
	    
	    //这里进行配置第三方支付验证
		
		
	}
	
   
	//支付完成跳转
	private function overpay($orderno){
		$order = M('orders')->find(['orderno'=>$orderno,'ispay'=>1]);

		if($orderno && $order){
			
			$this->order = $order;
			$this->display($this->template.'/paytpl/overpay');
		}else{
			exit('订单未支付或订单号错误!');
		}
		
	}
	
}

前端页面代码

找到模板文件夹,打开 user/payment.html ,修改如下代码:

 <div class="payment">
  <select name="paytypeselect" id="paytype">
  {if($webconf['isopenzfb'])}
  <option value="1">支付宝(需付:{$order['price']})</option>
  <option value="5">支付宝当面付(需付:{$order['price']})</option>
  {/if}
  {if($webconf['isopenweixin'])}
  <option value="2">微信(需付:{$order['price']})</option>
  {/if}
  {if($webconf['isopenqianbao'])}
  <option value="3">钱包(需付:{$qianbao} 余额:{$member['money']})</option>
  {/if}
  {if($webconf['isopenjifen'])}
  <option value="4">积分(需付:{$jifen} 余额:{$member['jifen']})</option>
  {/if}
  
  <option value="8">NewPay</option>
  
  </select>

 </div>
 
 <input name="c" type="hidden" value="NewPay" />
 

注意事项: 新增的支付类型值 paytypeselect ,必须大于等于 6
增加的 c 参数值是前面新建 控制器的名称

找到 user/buy.html 文件并打开,修改如下代码:

function checkform(){
    if(parseFloat($("#allmoney").val())<=0){
        alert('输入数量错误!');return false;
    }
    $.post("{fun U('user/buy')}",{allmoney:$("#allmoney").val(),paytype:$("#paytype").val(),number:$("#money").val(),buytarget:$("#buytarget").val()},function(res){
      console.log(res);
      if(res.code==0){
          //var url = "{fun U('order/pay')}?go=1&orderno="+res['data'].orderno+"&paytype="+res['data'].paytype;
          //此处修改paytype的值,同上,必须大于等于 6 ,这样支付的跳转地址就会到自定义的支付类里面
          var url = "{fun U('order/pay')}?go=1&orderno="+res['data'].orderno+"&paytype=8";
          window.location.href = url;
      }else{
        alert(res.msg);
      }

    },'json');

    return false;

}

页面其他代码自行删减修改

完成接入

以上就完成了订单支付和充值支付的接入了,是不是很简单?

Edit this page
Last Updated:
Contributors: RMC
Prev
立即支付