网站如何接入微信公众号JSAPI支付PHP版
1.首先,我们要有一个微信公众号(分类类型有订阅号,服务号,企业号)我们的微信公众号一定是个服务号只有它才有微信支付接口.。
并且这个微信公众号一定要进行微信认证才能申请微信支付接口。
2.申请JSAPI产品
3.,申请成功后还要到微信公众号中功能设置处进行配置
业务域名和js接口安全域名和网页授权域名填写都是你做微信支付功能的网站域名要是可以访问的域名
4.进入你获取微信支付的微信商户号。产品中心->开发配置进行产品配置
填写你调起微信公众号支付的网站地址 如https://www.baidu.com/方法名/参数值即可
5.这样基本支付环境已经搭建好了 当然微信开发文档上基本有了可以参照进昂环境搭建,可以进行开发。
步骤是:1.开发JSAPI支付时,必须在调用统一下单接口中获取到用户的openid并且缓存下来(不用每次都要获取了)
public function pay(){
vendor('pay.WxPayData');
vendor('pay.JsApiPay');
vendor('pay.WxPayApi');
vendor('pay.WxPayConfig');
vendor('pay.WxPayNotify');
$orderModel = M('weiz_order');
//①、获取用户openid
try{
$tools = new \JsApiPay();
$openId = $tools->GetOpenid();
if(empty($openId)&&$openId ==""){
if(session('expire_time')>time()){
$openId = session('openId');
}
}else{
session('openId',$openId);
session('expire_time',time()+300);//300秒过期时间
}
2.调用微信支付的统一下单接口
/②、统一下单
$input = new \WxPayUnifiedOrder();
$input->SetBody($body);//body商品描述
$input->SetAttach("附加数据");//attahch附加数据暂时不用附加数据
$input->SetOut_trade_no($out_trade_no);//out_trade_no商户订单号
$input->SetTotal_fee($total_fee);//订单总金额
$input->SetTime_start(date("YmdHis",time()));//交易开始时间
$input->SetTime_expire(date("YmdHis", time() + 600));//交易结束时间prepay_id只有两小时的有效期
$input->SetGoods_tag("无");//订单优惠标记暂时无
$input->SetNotify_url("http://event.com/index.php/Weixinpay/NotifyProcess");//异步回调地址不能携带参数
$input->SetTrade_type("JSAPI");//交易类型JSAPI
$input->SetOpenid($openId);//通过code来获取用户标识openID
$config = new \WxPayConfig();//获取商户配置
$order = \WxPayApi::unifiedOrder($config, $input);
//统一下单接口返回的预支付交易会话标识
$jsApiParameters = $tools->GetJsApiParameters($order);//获取jsapi支付的参数(json格式)
3.将获取到的预支付交易会话标识$jsApiParameters 分配给客户端 只有这个标识才能调起微信支付(所以这个参数很重要如果为空则支付失败)
4.前台拿到预支付交易会话标识后进行调起微信支付 其实按照JSAPI字面意思就是通过客户端的JS来调用支付API
$(function(){ function onBridgeReady(){
// alert(JSON.stringify(jsapi));
WeixinJSBridge.invoke(
'getBrandWCPayRequest',{$jsApiParameters},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
var authToken = $('.authToken').val();
}else if (res.err_msg == "get_brand_wcpay_request:cancel"){
$('.pay-fail-content').css('display','block');
$(".tip").fadeIn();
setInterval(function(){
$('.tip').fadeOut(5000);
},3000);//延迟3s执行tip谈出
}else{
//处理支付失败的逻辑
var wid = $('.wid').val();
}
});
}
5.当然微信支付提供了多个接口如查询订单,退款等不同的接口看项目需求。这里异步通知和同步通知就不写在这了 自己可以百度和查看微信开发文档
6.JSAPI支付功能常见错误是
a.微信公众号配置错误
b,微信商户号产品配置错误(支付授权目录)
c.统一下单接口请求参数要确保和微信开发平台一致
d.后台与客户端的预支付交易标识参数的传递出现了问题
最后建议 测试工具使用微信开发工具进行测试 虽然其没有权限调起微信这支付但能查出你的问题所在
谢谢!
网站如何接入微信公众号JSAPI支付PHP版的更多相关文章
- 微信公众号JSAPI支付
微信公众号JSAPI支付 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心-&g ...
- 在Thinkphp中微信公众号JsApi支付
由于网站使用的微信Native扫码支付,现在公众号需要接入功能,怎么办呢,看这官方文档,参考着demo进行写吧.直接进入正题 进入公众号(服务号)设置--->功能设置--->网页授权域名配 ...
- 微信公众号JSAPI支付-多公众号向同一商户号支付的问题解决
一.背景 项目提供公众号商城集成,在公众号里进行商品的购买,并与多家公众号合作增加渠道流量. . 二.实现 有关微信公众号.商户号的开通与支付绑定不细说 从背景里可知,我们需要实现多个公众号购买向同一 ...
- java微信公众号JSAPI支付以及所遇到的坑
上周做了个支付宝微信扫码支付,今天总结一下.微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊. 笔记地址 http://note.youdao.com/notesha ...
- PHP应用如何对接微信公众号JSAPI支付
微信支付的产品有很多,1. JSAPI支付 2. APP支付 3. Native支付 4.付款码支付 5. H5支付. 其中基于微信公众号开发的应用选择“JSAPI支付“产品,其他APP支付需 ...
- 【weixi】微信支付---微信公众号JSAPI支付
一.JSAPI支付 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打 ...
- PHP微信公众号JSAPI网页支付(上)
一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...
- PHP微信公众号JSAPI网页支付(下)
上一篇PHP微信公众号JSAPI网页支付(上)中讲到了公众号平台的相关设置以及支付的大致流程. 这一篇重点讲支付后,异步接受回调通知,以及处理后同步通知微信服务器. 首先梳理下整个jsapi支付的流程 ...
- 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转
线程安全使用(四) 这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...
随机推荐
- springboot(七).springboot整合jedis实现redis缓存
我们在使用springboot搭建微服务的时候,在很多时候还是需要redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话又比较麻烦,在这里,我们使用jedis来实现r ...
- JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句Criteria基本用法
Criteria进行数据查询与HQL和SQL的区别是Criteria完全是面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹,使用Criteria 查询数据包括以下步骤: 1. 通过sessi ...
- Hdu2037
Hdu2037 - 今年暑假不AC 题意: 在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少. 解法: 这其实就是一个大水题,一个非常简单明了的区间覆盖问题 ...
- mac安装genymotion遇到的问题记录
1.出错内容:An error occured while deploying the file或者使用adb devices连接的时候出现下面的错误 adb server version (40) ...
- Flutter移动电商实战 --(6)dio基础_Get_Post请求和动态组件协作
上篇文章中,我们只看到了 dio 的使用方式,但并未跟应用关联起来,所以这一篇将 dio 网络请求与应用界面结合起来,当然这也是为以后的实战作基础准备,基础打牢,我们才能飞速前进. 1.案例说明 我们 ...
- vs下qt的信号与槽实现
实现主窗口中Add按钮的功能, 这一部分要特别注意,除了实现功能代码外,还需自己手动添加一些其他的代码(Qt Creator可以自动添加). 我们需要在2个地方添加代码. 第1个是在addressbo ...
- vscode如何右键选择浏览器运行html文件
我们利用Vscode软件编写html的时候,一般都想右键选择html文件,然后直接选择浏览器运行,但是默认是没有的: 下面鄙人给大家分享一下如何设置. 这里你会发现有好多类似的插件,你自己选择一个喜欢 ...
- linux的dos开关机命令
常用:halt.reboot CentOS关机命令: 重启命令 reboot shutdown -r now 立刻重启 shutdown -r 10 过10分钟自动重启 shutdown -r 20: ...
- Spring Boot_打造企业级微信点餐系统_汇总贴
2019更新版 Spring Boot双版本(1.5/2.1) 打造企业级微信点餐系统 H:\BaiDu\微服务0830\2019微服务时代Spring Boot双版本(1.5-2.1) 打造企业级 ...