在Thinkphp中微信公众号JsApi支付
由于网站使用的微信Native扫码支付,现在公众号需要接入功能,怎么办呢,看这官方文档,参考着demo进行写吧。直接进入正题
进入公众号(服务号)设置--->功能设置--->网页授权域名配置好需要进行支付的页面,支持配置根目录。这一步是为了获取用户的openid。

进入微信商户平台(pay.weixin.qq.com)设置JSAPI支付支付目录,设置路径:商户平台-->产品中心-->开发配置。配置好之后便可以开始着手进行开发,当你看到官方文档的业务流程当中的业务流程时序图的时候,我相信你是一脸懵逼,腾讯的什么都好,就开发文档容易让人给看晕,不过已经算方便了。
由于之前写得一个功能,在用户点击进入页面的时候已经获取用户的信息,并存入到session中,因此下面的代码中的openid直接从session获取。
接下来下载官方demo(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1),这里下载php,放到extend目录下,目录结构为

核心代码便是lib文件夹下的类库,example中有官方demo,可以直接进行改写。
文件已经引入,着手实现支付功能,在控制器写index方法
public function index()
{ if (IS_POST) { include(ROOT_PATH.'extend/Wxpay/lib/WxPay.Api.php');
include(ROOT_PATH.'extend/Wxpay/example/WxPay.JsApiPay.php');
// include(ROOT_PATH.'extend/Wxpay/example/WxPay.config.php');
include(ROOT_PATH.'extend/Wxpay/example/log.php'); try{
$tools = new \JsApiPay();
$openId = session('openid');//这里是之前获取到的openid并存入session,直接从session获取,否则为以下两句 /*$tools = new JsApiPay();
$openId = $tools->GetOpenid();*/
//②、统一下单
$input = new \WxPayUnifiedOrder();
$input->SetBody("在线支付");
$input->SetAttach("在线支付");
$input->SetOut_trade_no($data["orderid"]);
$input->SetTotal_fee($data["pricetotal"]*100);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
//echo $http_type . $_SERVER['HTTP_HOST'];
$input->SetNotify_url($http_type . $_SERVER['HTTP_HOST']."/index.php/Payoff/Wxpay/notifyurl.html");//notify是接收异步通知的页面,可以进行业务逻辑处理
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$config = new \WxPayConfig();
$order = \WxPayApi::unifiedOrder($config, $input);
$jsApiParameters = $tools->GetJsApiParameters($order); //获取共享收货地址js函数参数
$editAddress = $tools->GetEditAddressParameters();
} catch(Exception $e) {
Log::ERROR(json_encode($e));
}
$this->assign('data', $data);
$this->assign('jsApi', $jsApiParameters);
$this->display();
}
else
{
E("Access Denied");
} }
在视图文件中根据自己需要,下面随便写的demo
<form id="thisform" action="#" method="post">
订单号:{$data['orderid']}<input type="hidden" name="orderid" class="form-control" id="orderid" value="{$orderid}"><br><br>
金额:{$data['pricetotal']} 元<input type="hidden" name="money" class="form-control" id="goodprice" value="50"><br><br>
<div align="center">
<button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" >立即支付</button>
</div>
</form>
<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{ WeixinJSBridge.invoke(
'getBrandWCPayRequest',
{$jsApi},
function(res){
WeixinJSBridge.log(res.err_msg);
alert(res.err_code+res.err_desc+res.err_msg);
}
);
} function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
</script>
这里直接用的是官方demo的JS,没有修改,可以根据获取的支付结果做相应的业务逻辑处理。至此便成功调起手机微信端支付,可以根据demo处理自己的业务逻辑。
在Thinkphp中微信公众号JsApi支付的更多相关文章
- 微信公众号JSAPI支付
微信公众号JSAPI支付 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心-&g ...
- 微信公众号JSAPI支付-多公众号向同一商户号支付的问题解决
一.背景 项目提供公众号商城集成,在公众号里进行商品的购买,并与多家公众号合作增加渠道流量. . 二.实现 有关微信公众号.商户号的开通与支付绑定不细说 从背景里可知,我们需要实现多个公众号购买向同一 ...
- java微信公众号JSAPI支付以及所遇到的坑
上周做了个支付宝微信扫码支付,今天总结一下.微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊. 笔记地址 http://note.youdao.com/notesha ...
- PHP应用如何对接微信公众号JSAPI支付
微信支付的产品有很多,1. JSAPI支付 2. APP支付 3. Native支付 4.付款码支付 5. H5支付. 其中基于微信公众号开发的应用选择“JSAPI支付“产品,其他APP支付需 ...
- 网站如何接入微信公众号JSAPI支付PHP版
1.首先,我们要有一个微信公众号(分类类型有订阅号,服务号,企业号)我们的微信公众号一定是个服务号只有它才有微信支付接口.. 并且这个微信公众号一定要进行微信认证才能申请微信支付接口. 2.申请JSA ...
- 【weixi】微信支付---微信公众号JSAPI支付
一.JSAPI支付 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打 ...
- 项目中微信公众号调取支付控件demo
微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 前端代码demo (JSP页面): ...
- PHP微信公众号JSAPI网页支付(下)
上一篇PHP微信公众号JSAPI网页支付(上)中讲到了公众号平台的相关设置以及支付的大致流程. 这一篇重点讲支付后,异步接受回调通知,以及处理后同步通知微信服务器. 首先梳理下整个jsapi支付的流程 ...
- PHP微信公众号JSAPI网页支付(上)
一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...
随机推荐
- 如何通过 JavaCSV 类库来优雅地(偷懒)读写 CSV 文件?
欢迎关注笔者的公众号: 小哈学Java, 专注于推送 Java 领域优质干货文章!! 个人博客: https://www.exception.site/essay/how-to-create-read ...
- Java中使用RSA算法加密
Java中使用RSA算法加密 概述 RSA加密算法是一种非对称加密算法 RSA加密的方式 使用公钥加密的数据,利用私钥进行解密 使用私钥加密的数据,利用公钥进行解密 RSA是一对密钥.分别是公钥和私钥 ...
- Spring Boot整合Thymeleaf视图层
目录 Spring Boot整合Thymeleaf Spring Boot整合Thymeleaf 的项目步骤 Thymeleaf 语法详解 Spring Boot整合Thymeleaf Spring ...
- Luogu1039 侦探推理
题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明 ...
- Redis设计与实现笔记 - hash
基本结构如下 初始状态一直使用 dictht[0],即 0 号哈希表 在发生扩容 rehash的时候,开始渐进式向 dictht[1]哈希表转移, 转移完成后交换 dicth[0] 与 dictht[ ...
- (29)ASP.NET Core3.1 Swagger(OpenAPI)
1.什么是Swagger/OpenAPI? Swagger是一个与语言无关的规范,用于描述REST API.因为Swagger项目已捐赠给OpenAPI计划,所以也叫OpenAPI.它允许计算机和人员 ...
- springboot-mybatis-oracle学习笔记
前言 最近公司的项目是基于 oracle 数据库的,这里记录下 springboot+mybatis+oracle 的踩坑过程. 开发前准备 环境参数 开发工具:IDEA 基础工具:Maven+JDK ...
- 微信小程序template富文本插件image宽度被js强制设置
这段时间一直做微信小程序,过程中遇到了一个问题,这个问题一直没有得到完美的解决. 问题描述: 在Web编程中经常会引入template插件,这个插件是封装好,我们通常的做法是直接引入,配置简单,好用, ...
- spring07
关于spring的泛型依赖注入主要是继承等方面的知识 具体实现的简单的代码如下: package bao1; public class BaseRepository <T>{ } pack ...
- Linux 文件管理篇(一 档案读写)
由第一行开始显示文件内容 cat 由最后一行开始显示文件内容 tac 一页一页的显示文件内容 more 一页一页的显示文件内容(可以向前翻页) ...