网站如何接入微信公众号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 ...
随机推荐
- WebSSH2 界面ssh(转载)
工具:Virtual Machines14.1 系统环境:CentOS 7 64位 (2个) IP:192.168.163.138 IP:192.168.163.141 概述:在138系统中安装部 ...
- python能用来做什么?这3大主要用途你一定要知道!(实用)
导读:如果你想学Python,或者你刚开始学习Python,那么你可能会问:“我能用Python做什么?” 这个问题不好回答,因为Python有很多用途. 但是随着时间,我发现有Python主要有以下 ...
- Linux下出现Permission denied解决
今天不想写前言,直接写解决办法 输入命令设置root密码 sudo passwd 得到的答复是 We trust you have received the usual lecture from th ...
- 如何使用SendGrid发送邮件
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 2.3 Go语言基础之数组
本文主要介绍Go语言中数组(array)及它的基本使用. 一.Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基 ...
- 使用预设半透明鼠标Cursor
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- 在业务控制方法中写入Request,Response等传统web参数
可以在业务控制方法中书写传统web参数,这种方式我们不提倡,耦合了 @Controller @RequestMapping(value="/user") public class ...
- Hibernate3核心API简介-Transaction接口
代表一次原子操作,它具有数据库事务的概念.所有持久层都应该在事务管理下进行,即使是只读操作. Transaction tx = session.beginTransaction();常用方法:c ...
- Servlet 异常处理( 配置错误页面)
当一个 Servlet 抛出一个异常时,Web 容器在使用了 exception-type 元素的 web.xml 中搜索与抛出异常类型相匹配的配置. 您必须在 web.xml 中使用 error-p ...
- linux简单命令---网络编程
---------------------------------------------------------------------------------------------------- ...