微信支付之JSAPI公众号支付详解


Posted in PHP onMay 15, 2019

前提

本教程默认以下几点你已经完全满足:

  1. 开通了认证后的服务号
  2. 服务号开通的微信支付的认证
  3. 腾讯给你的邮件中有商户登录的账号和密码
  4. 拥有一个可供上传代码和设置回调域名的网站或云服务
  5. 有一点点php知识。

开通了认证后的服务号服务号开通的微信支付的认证腾讯给你的邮件中有商户登录的账号和密码拥有一个可供上传代码和设置回调域名的网站或云服务有一点点php知识。

第一步:公众号设置

1、 你的公众号,在支付认证的标签下, 内容应该和下图类似。证明公众号已经完成了认证和合约的签署。

微信支付之JSAPI公众号支付详解

2、 然后在微信支付?开发配置中,设置测试授权目录和测试白名单

微信支付之JSAPI公众号支付详解

3、 在公众号设置-功能设置标签中,设置JS接口安全域名,这个域名在认证获取token的过程中可能会用到。但具体如何使用目前我也不是特别的清楚,只是按照大家的思路配置完事。

微信支付之JSAPI公众号支付详解

第二步:下载,调试SDK

1、 进入下载页面,选择要下载的SDK类型,这里我们选择的是PHP类型

微信支付之JSAPI公众号支付详解

2、 下载完成之后,使用IDE将SDK打开,其文件目录应如下所示:

微信支付之JSAPI公众号支付详解

3、 将这个sdk整体打包上传到你的服务器上,或是云服务平台。将网址发送到微信客户端,打开应该能看到如下界面

微信支付之JSAPI公众号支付详解

4、 点击JSAPI支付

微信支付之JSAPI公众号支付详解

微信支付之JSAPI公众号支付详解

5、 点击立即支付

微信支付之JSAPI公众号支付详解

6、 交易成功返回页面。

微信支付之JSAPI公众号支付详解

第三步:修改代码,访问自己的商户

1、 index.php.将第一个列表中的a标签中具体的网址,转为你自己的网址,这样你的配置才能生效。
注:这一步一定要注意,很多教程都没说,结果我改来改去都是访问腾讯的测试页面。

微信支付之JSAPI公众号支付详解

2、 然后在jsapi.php找到如下的代码:

//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();

3、 进入GetOpenid()函数

public function GetOpenid()
  {
    //通过code获得openid
    if (!isset($_GET['code'])){
      //触发微信返回code码
      $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);
      $url = $this->__CreateOauthUrlForCode($baseUrl);
      Header("Location: $url");
      exit();
    } else {
      //获取code码,以获取openid
      $code = $_GET['code'];
      $openid = $this->getOpenidFromMp($code);
      return $openid;
    }
  }

大概说一下代码功能:

通过baseUrl 获取基础网址通过url 拼装获取code的url然后通过header函数进行跳转。

4、 进入lib/WxPay.Config.php文件,根据说明修改以下几个内容

//=======【基本信息设置】=====================================
  //
  /**
   * TODO: 修改这里配置为您自己申请的商户信息
   * 微信公众号信息配置
   * 
   * APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
   * 
   * MCHID:商户号(必须配置,开户邮件中可查看)
   * 
   * KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
   * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
   * 
   * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
   * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
   * @var string
   */
  const APPID = '你的appid'; //demo:wx426b3015555a46be
  const MCHID = '邮件中的商户号';//demo:1225312702
  const KEY = '这个是你在商户管理平台-API安全中自行设置的32位字符串';//demo:e10adc3949ba59abbe56e057f20f883e
  const APPSECRET = '你的app密钥';//demo:01c6d59a3f9024db6336662ac95c8e74

  //=======【证书路径设置】=====================================
  /**
   * TODO:设置商户证书路径
   * 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要,可登录商户平台下载,
   * API证书下载地址:https://pay.weixin.qq.com/index.php/account/api_cert,下载之前需要安装商户操作证书)
   * @var path
   */
  const SSLCERT_PATH = '../cert/apiclient_cert.pem';
  const SSLKEY_PATH = '../cert/apiclient_key.pem';

5、 设置Key

微信支付之JSAPI公众号支付详解

6、 配置完成后,基本上也就能够如同SDK例子一样的使用公众号支付功能了。

支付完成后,在商户管理平台应该能查到类似下面的流水信息

微信支付之JSAPI公众号支付详解

如果有问题

如果你点击JSAPI支付,出现log.php的访问权限问题

permission denied in example/log.php

解决方案如下:

1、 进入jsapi.php文件

2、 找到下面的代码

require_once 'log.php';
//初始化日志
$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);

3、 将这三句话注释掉就行了。

//require_once 'log.php';
//初始化日志
//$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
//$log = Log::Init($logHandler, 15);

这样应该就可以用了。

4、 界面应该和下面的一样,其中金额上面,应该显示你注册的商户平台录入的商户名称。

微信支付之JSAPI公众号支付详解

jsapi无法使用你不是公众号平台关注用户

1、 返回查看你设置的测试白名单中加入的微信号,和你测试用的微信号是否一致,不一致请设置一致

2、 微信平台bug,你将白名单中的微信号删除,然后重新添加一遍就可以了

jsapi报错

1、 检查下面的内容,是否与你当前的公众号和商户号配置是一致的。

/**
   * TODO: 修改这里配置为您自己申请的商户信息
   * 微信公众号信息配置
   * 
   * APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
   * 
   * MCHID:商户号(必须配置,开户邮件中可查看)
   * 
   * KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
   * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
   * 
   * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
   * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
   * @var string
   */
  const APPID = 'demo:wx426b3015555a46be';
  const MCHID = '1225312702';
  const KEY = 'e10adc3949ba59abbe56e057f20f883e';
  const APPSECRET = '01c6d59a3f9024db6336662ac95c8e74';

#cer商户证书

该证书需要上传到example目录统一目录下的cer文件中,登录商户平台,下载后,覆盖该文件夹即可

注意

测试授权目录,和你的服务器地址,一级域名必须是一致的。否则无法通过支付验证。

以上所述是小编给大家介绍的JSAPI公众号支付的方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php获取post中的json数据的实现方法
Jun 08 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 #PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 #PHP
yii2的restful api路由实例详解
May 14 #PHP
php的扩展写法总结
May 14 #PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 #PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 #PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 #PHP
You might like
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
非常好的js代码
2006/06/27 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
python中模块的__all__属性详解
2017/10/26 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
反邪教学习心得体会
2016/01/15 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
golang中字符串MD5生成方式总结
2021/07/04 Golang
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers