微信支付之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实现多服务器session共享之NFS共享的方法
Mar 16 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
一段实用的php验证码函数
May 19 PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
php 中的closure用法详解
Jun 12 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 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目录遍历函数opendir用法实例
2014/11/20 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
深入浅析Vue组件开发
2016/11/25 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
Js面试算法详解
2018/04/08 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
js 计算图片内点个数的示例代码
2019/04/04 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
Python中有趣在__call__函数
2015/06/21 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
全面理解Python中self的用法
2016/06/04 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
简单了解python变量的作用域
2019/07/30 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
python实现人机猜拳小游戏
2020/02/03 Python
如何理解python中数字列表
2020/05/29 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
个人简历自我评价八例
2013/10/31 职场文书
营销总经理岗位职责
2014/02/02 职场文书
2014年学习部工作总结
2014/11/12 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB