网站如何接入微信公众号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 ...
随机推荐
- HDU6513/CCPC2017--A Secret(KMP)
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others)Total ...
- HDU 2176 取(m堆)石子游戏 —— (Nim博弈)
如果yes的话要输出所有情况,一开始觉得挺难,想了一下也没什么. 每堆的个数^一下,答案不是0就是先取者必胜,那么对必胜态显然至少存在一种可能性使得当前局势变成必败的.只要任意选取一堆,把这堆的数目变 ...
- JAVA类定义的修饰
命名类的访问权限public.protected.friendly,private 这四个的权限, 作用域: 当前(父,超)类: 同一Package: 派生(子)类: 其他Package: publi ...
- CPU排行-台式
此文已经于2017年11月1日更新!来源于极速空间 实际对比: intel i3-7100(双核四线程) CPU性能远超过 AMD X4 860K(四核四线程) intel i5-7500(四核四线程 ...
- LC 583. Delete Operation for Two Strings
Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 t ...
- Kotlin函数中默认参数
Java不支持默认参数.但kotlin函数却可以 package loaderman.demo class Customer(var name:String ="name"){// ...
- css sprite 雪碧图
使用雪碧图的目的:有时为了美观,我们会使用一张图片来代替一些小图标,但是一个网页可能有很多很多的小图标,浏览器在显示页面的时候,就需要像服务器发送很多次访问请求, 这样一来,一是造成资源浪费,二是会导 ...
- excel怎么设置密码保护?Excel文件添加密码保护教程
excel怎么设置密码保护?Excel文件添加密码保护教程 众所周知,Excel具有强大的数据处理和数据分析能力,广泛应用于加工学统计及金融统计中.特别是金融统计需要较高的安全性,那么就一定要为Exc ...
- Java数组(1):数组与多维数组
我们对数组的基本看法是,你可以创建它们,通过使用整型索引值访问它们的元素,并且他们的尺寸不能改变. 但是有时候我们需要评估,到底是使用数组还是更加灵活的工具.数组是一个简单的线性序列,这使得元素访问非 ...
- iptable和tcpdump的先后顺序
tcpdump是一个用来抓取linux网络数据包的工具,而iptables是linux上的防火墙工具,两者之间的顺序是: Wire -> NIC -> tcpdump -> netf ...