在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.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...
随机推荐
- JavaScript JSON 与 AJAX
JavaScript JSON 与 AJAX JSON 是一种轻量的数据交互格式,与 AJAX 配合完成前端页面与服务端的信息传递,本文介绍 JSON 的使用.原生 AJAX 写法.JSONP 跨域解 ...
- windows server 2016 远程桌面mstsc DPI(更改文本、应用和其他项目大小) 设置
windows server 2016 远程桌面mstsc DPI 设置 在高分辨率机器2K,4K,8K,登入使用window远程桌面mstsc时,登入后虽然分辨率变成了和cilent一样分辨率 但是 ...
- 在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度
在这篇文章中,我将介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业.这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态.接下来我将演示如何创建一个简 ...
- ES6规范及语法基础
var的特点 函数作用域 let的特点 没有变量提升,必须先声明.再调用 同一个作用域下不可以重复定义同一个名称 块级作用域 function fun(){ let a = 10 if(true){ ...
- 四、【Docker笔记】Docker容器
容器是Docker的另一个核心概念,容器就是镜像的一个运行实例,只是它具有一个可写的文件层,而镜像是一个只读的文件. 一.创建容器 1.新建容器 我们可以使用 docker create 命令来创建一 ...
- vue实现选项卡切换--不用ui库
vue的ui库中基本都有选项卡切换的组件,但是在项目开发过程中却不一定能很好的为我们所用,因为里面的样式和 一些状态并不能很好的根据我们的项目需求进行定制.最近项目中使用的是vant-ui中的标签页, ...
- 粘包处理现象及其解决方案——基于NewLife.Net网络库的管道式帧长粘包处理方法
[toc] #1.粘包现象 每个TCP 长连接都有自己的socket缓存buffer,默认大小是8K,可支持手动设置.粘包是TCP长连接中最常见的现象,如下图 socket缓存中有5帧(或者说5包)心 ...
- 利用data文件恢复MySQL数据库
背景:测试服务器 MySQL 数据库不知何种原因宕机,且无法启动,而原先的数据库并没有备份,重新搭建一个新服务器把原data 复制出来 进行恢复 1 尽量把原data复制出来(一个都不要少以防意外 其 ...
- Zookeeper是如何实现分布式锁的
[toc] Zookeeper是如何实现分布式锁的 标签 : Zookeeper 分布式 实现分布式锁要考虑的重要问题 1. 三个核心要素 加锁, 解锁, 锁超时 2. 三个问题 要保证原子性操作, ...
- new FileReader()
一.调用FileReader对象的方法 方法名 参数 描述abort none 中断读取readAsBinaryString file 将文件读取为二进制码readAsDataURL file 将文件 ...