由于网站使用的微信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支付的更多相关文章

  1. 微信公众号JSAPI支付

    微信公众号JSAPI支付 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心-&g ...

  2. 微信公众号JSAPI支付-多公众号向同一商户号支付的问题解决

    一.背景 项目提供公众号商城集成,在公众号里进行商品的购买,并与多家公众号合作增加渠道流量. . 二.实现 有关微信公众号.商户号的开通与支付绑定不细说 从背景里可知,我们需要实现多个公众号购买向同一 ...

  3. java微信公众号JSAPI支付以及所遇到的坑

    上周做了个支付宝微信扫码支付,今天总结一下.微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊. 笔记地址 http://note.youdao.com/notesha ...

  4. PHP应用如何对接微信公众号JSAPI支付

    微信支付的产品有很多,1. JSAPI支付  2. APP支付  3. Native支付  4.付款码支付  5. H5支付. 其中基于微信公众号开发的应用选择“JSAPI支付“产品,其他APP支付需 ...

  5. 网站如何接入微信公众号JSAPI支付PHP版

    1.首先,我们要有一个微信公众号(分类类型有订阅号,服务号,企业号)我们的微信公众号一定是个服务号只有它才有微信支付接口.. 并且这个微信公众号一定要进行微信认证才能申请微信支付接口. 2.申请JSA ...

  6. 【weixi】微信支付---微信公众号JSAPI支付

    一.JSAPI支付 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打 ...

  7. 项目中微信公众号调取支付控件demo

    微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 前端代码demo (JSP页面): ...

  8. PHP微信公众号JSAPI网页支付(下)

    上一篇PHP微信公众号JSAPI网页支付(上)中讲到了公众号平台的相关设置以及支付的大致流程. 这一篇重点讲支付后,异步接受回调通知,以及处理后同步通知微信服务器. 首先梳理下整个jsapi支付的流程 ...

  9. PHP微信公众号JSAPI网页支付(上)

    一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...

随机推荐

  1. flask中的分页器

    paginate():  分页查询,返回一个分页对象 paginate(参数1, 参数2, 参数3) : 参数1:当前是第几页(page) 参数2:每页显示几条信息(per_page) 参数3:err ...

  2. vue-cli 引入axios及跨域使用

    使用 cnpm 安装 axios cnpm install axios --save-dev 安装其他插件的时候,可以直接在 main.js 中引入并 Vue.use(),但是 axios 并不能 u ...

  3. 分享一款一直在维护的【网络开发运维|通用调试工具】: http请求, websocket,cmd, RSA,DES, 参数签名工具,脚本批量生成工具,google动态口令,端口检测,组件注册,js混淆...

    首先发下下载地址:https://files.cnblogs.com/files/taohuadaozhu/ConfigLab.Test.ex.rar 日常开发,运维,跨部门跨公司对接中.  想快速调 ...

  4. Sql练习201908200918

    表结构: 昨天遇到一个笔试题,求一个聚合函数小于等于1000的值,并将编号同时输出. sql server: select nid,SUM(amount) amountSum from orders_ ...

  5. Python学习-第五节:面向对象

    概念: 核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式.若程序一开始是要着手解决一个大的问题,面向 ...

  6. 1035 Password (20分)(水)

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  7. 非参数估计——核密度估计(Parzen窗)

    核密度估计,或Parzen窗,是非参数估计概率密度的一种.比如机器学习中还有K近邻法也是非参估计的一种,不过K近邻通常是用来判别样本类别的,就是把样本空间每个点划分为与其最接近的K个训练抽样中,占比最 ...

  8. composer换源,composer切换国内源

    首先要分清楚是局部换源还是全局换源 1.局部换源(仅对当前项目有效) 在当前项目下的composer.json中添加 { "repositories": [ { "typ ...

  9. Kylin 新定位:分析型数据仓库

    亲爱的各位社区朋友: Apache Kylin 在 2014 年 10 月开源并加入 Apache 软件基金会的孵化器,一年后从孵化器毕业成为 Apache 顶级项目.从第一天起,Kylin 的标语是 ...

  10. 如果你的 pip 命令不能用,你可以这样解决

    文章更新于:2020-04-05 注:如果想了解 pip 参数的使用参见:pip 命令参数以及如何配置国内镜像源 如何解决 pip 不能用的问题 一.你可能会遇到的问题 1.检查你敲命令的位置 2.如 ...