微信支付之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者的疑难问答(1)
Oct 09 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
一步一步学习PHP(6) 面向对象
Feb 16 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
PHP生成自适应大小的缩略图类及使用方法分享
May 06 PHP
php检查日期函数checkdate用法实例
Mar 19 PHP
Symfony2联合查询实现方法
Mar 18 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
PHP基于Redis消息队列实现发布微博的方法
May 03 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 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
PHP动态图像的创建
2006/10/09 PHP
PHP脚本的10个技巧(6)
2006/10/09 PHP
第六节--访问属性和方法
2006/11/16 PHP
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
php 无限级 SelectTree 类
2009/05/19 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
php伪静态之APACHE篇
2014/06/02 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
详解vue-router基本使用
2017/04/18 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
javascriptvoid(0)含义以及与"#"的区别讲解
2019/01/19 Javascript
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
关于Python数据结构中字典的心得
2017/12/04 Python
python ---lambda匿名函数介绍
2019/03/13 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
工程管理专业个人求职信范文
2013/12/07 职场文书
给校长的一封建议书
2014/03/12 职场文书
保护环境标语
2014/06/09 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
承租经营合作者协议书
2014/10/01 职场文书
护理专业自荐信范文
2015/03/06 职场文书
运动会口号霸气押韵
2015/12/24 职场文书