微信支付之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 相关文章推荐
一个odbc连mssql分页的类
Oct 09 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
PHP生成随机用户名和密码的实现代码
Feb 27 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
php数组去重复数据示例
Feb 25 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
Sep 26 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
PHP使用QR Code生成二维码实例
Jul 07 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
NOT NULL 和NULL
2007/01/15 PHP
PHP通用检测函数集合
2011/02/08 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
jquery isType() 类型判断代码
2011/02/14 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
js实现文字跑马灯效果
2017/02/23 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
python装饰器与递归算法详解
2016/02/18 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
优秀中专生推荐信
2013/11/17 职场文书
十八大感想感言
2014/02/10 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书