简介

微信公众号支付,顾名思义就是必须在微信中实现支付,并且需要公众号配合。

教程

由于我们使用的是第三方封装好的接口,这里省去了我们自己配置公众号。为什么用第三方?因为个人没有申请权限。

交互细节:

以下是支付场景的交互细节,请认真阅读,设计商户页面的逻辑:

用户打开商户网页选购商品,发起支付,在网页通过JavaScript调用getBrandWCPayRequest接口,发起微信支付请求,用户进入支付流程。

用户成功支付点击完成按钮后,商户的前端会收到JavaScript的返回值。商户可直接跳转到支付成功的静态页面进行展示。

商户后台收到来自微信开放平台的支付成功回调通知,标志该笔订单支付成功。

前端引入:

后台逻辑,基本上就这三步:

获取授权链接

根据 code 获取 openId

根据 openId 获取支付参数

/**

* 获取授权链接,首先调用此方法

* @return

*/

@GetMapping(value="getOauthUrl")

public void getOauthUrl(HttpServletResponse response) throws IOException {

String url="https://xxx.xxxx.vip/pay/weiXin.html?a=1";

String oauthUrl = WxPay.getWxOauthUrl(null, url);

response.sendRedirect(oauthUrl);

}

/**

* 根据 code 获取 openId

* @param code

* @return

*/

@PostMapping(value="getWxOauthInfo")

public Result getWxOauthInfo(String code) {

WxOauthInfo wxOauthInfo = WxPay.getWxOauthInfo(code);

return Result.ok(wxOauthInfo);

}

/**

* 下单并获取请求参数

* @return

*/

@PostMapping(value="jsApiPay")

public Result jsApiPay(Product product) {

return wxPayService.jsApiPay(product);

}

前台逻辑:

var order = {};

var openId;

$(function(){

var code = GetRequest()['code'];

$.ajax({

url:"/pay/getWxOauthInfo",

type: "POST",

data : {'code':code},

success: function (result) {

openId = result.msg.openId;

}

});

});

function callPay(){

$.ajax({

url:"/pay/jsApiPay",

data : {

productId:1,

body:"胡列娜精美手办",

totalFee:'1',

openId:openId

},

type: "POST",

success: function (result) {

if(result.code==0){

order = JSON.parse(result.msg);

order.openId = openId;

pay();

}

}

});

}

function pay(){

if (typeof WeixinJSBridge == "undefined"){

if( document.addEventListener ){

document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);

}else if (document.attachEvent){

document.attachEvent('WeixinJSBridgeReady', onBridgeReady);

document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);

}

}else{

onBridgeReady();

}

}

function onBridgeReady(){

WeixinJSBridge.invoke('getBrandWCPayRequest',order,function(res){

//使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。

if(res.err_msg == "get_brand_wcpay_request:ok"){

//微信 自带 支付成功效果

}else if(res.err_msg == "get_brand_wcpay_request:cancel"){

alert("用户取消支付!");

}else if(res.err_msg == "get_brand_wcpay_request:fail"){

alert("支付失败!");

}

})

}

function GetRequest() {

var url = location.search;

var theRequest = new Object();

if (url.indexOf("?") != -1) {

var str = url.substr(1);

strs = str.split("&");

for(var i = 0; i < strs.length; i ++) {

theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);

}

}

return theRequest;

}

演示

网址:pay.cloudbed.vip/login.html

账号:pay 密码:123456

支付服务:支付宝,微信,银联详细 代码案例:

gitee.com/52itstyle/spring-boot-pay

php 公众号微信支付流程,微信公众号支付完整流程案例相关推荐

  1. iOS 拦截支付宝H5支付,完成掉起支付宝APP支付,回到自己APP,完整流程

    先说一下这个想法的来源,然后有相关需求的朋友也可以这样来操作 公司产品用到了支付宝支付,但是避免上架审核问题(不能接入支付宝SDK,害怕检测),采用了支付宝的H5支付,作为产品的支付渠道:APP内部, ...

  2. 微信js-sdk图片上传下载——java完整流程

    最近做的一个项目刚好用到微信js-sdk的图片上传接口,在这里做一下总结. 在这里能知道使用js api的基本配置https://mp.weixin.qq.com/wiki?t=resource/re ...

  3. 微信小程序使用腾讯地图完整流程

    前言:开发小程序需要得到定位和位置的省市区文字信息,看了所有的文章都没有一个完整和像样的,全是copy来,copy去的文章 - _ -!,一怒之下,开始了自己的踩坑之路 第一步:申请腾讯地图账号 腾讯 ...

  4. 在HbuilderX中实现微信小程序下蓝牙连接打印机完整实战案例

    1.基础开发环境,所用到的 Api 以及实现的思路. 应用场景: 商家打印小票,小票包含顾客消费的商品明细信息以及末尾附上二维码,二维码供顾客扫码开票. HbuilderX开发工具: HBuilder ...

  5. iOS APP发布---版本配置完整流程

    app打包发布需要在Xcode上完成打包上传过程.Xcode端完成上传之后,再在App Store Connect端完成构建版本.上架审核.发布提交的流程. 其他相关文档如下,操作仅供参考. 苹果开发 ...

  6. HPB普及:BOE完整流程、高性能选举

    HPB普及:BOE完整流程.高性能选举 BOE完整流程 在共识选举算法方面,当前主流区块链技术共识机制,主要分为两大类: 一类是以比特币.以太坊为代表的去中心化机制:治理者与有强大算力的节点对等,存在 ...

  7. DVWA靶场搭建完整流程

    DVWA靶场搭建完整流程 @[TOC](DVWA靶场搭建完整流程) 欢迎来到期待nila博客 1.下载phpstudy 2.配置phpstudy 3.下载DVWA 4. 配置DWVA 欢迎来到期待ni ...

  8. 微信公众号支付完整流程

    一.微信支付相关文档 jsapi支付下单:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml jsapi支付场景:http ...

  9. php获取微信收款记录,微信公众号开发之微信支付代码记录的实现

    需求说明 这个需求说明是完全没有必要的,但是还是写一下吧,但凡是做公众号的,一般都是需要了解这个微信支付的,不然基本的业务都没办法走,所以今天简单的记录一下微信支付的一些问题以及流程是怎么样的.记录的 ...

最新文章

  1. python从控制台读取数据
  2. python数据分析numpy_利用python进行数据分析-NumPy高级应用
  3. RPC调用框架比较分析--转载
  4. JavaCC首页、文档和下载 - 语法分析生成器 - 开源中国社区
  5. beetl 时间输出格式化
  6. Django登陆以后重定向到请求登陆的页面
  7. Setting up NUnit for C# Unit Testing with Visual Studio C# Express 2008
  8. C# 开发和使用中的32个技巧
  9. Vue音乐播放器入门Demo及Vue环境搭建运行
  10. 响铃:号牌上又领先了一步,小鹏汽车正在极速狂奔
  11. win10系统Windows 资源保护无法启动修复服务该如何解决?
  12. 截止失真放大电路_反馈/反馈电路/反馈类型的判别方法
  13. pinterest,图片网站的传奇
  14. Processing编写熊猫
  15. NYOJ 366 STL 全排列
  16. 关于怎么解决java.lang.NoClassDefFoundError错误
  17. 358. K 距离间隔重排字符串 排序
  18. 九段刀客 vue-router实现原理
  19. PID循迹机器人及整定
  20. java传感器_传感器 - javawebsoa - 博客园

热门文章

  1. Qt/C++编写自定义控件48-面板窗体控件
  2. hadoop2.x下Yarn详解
  3. 资本论 卡尔马克思 恩格斯
  4. strcpy函数(复制字符串)
  5. 字符串复制函数strcpy()
  6. 安卓和ios的ui设计区别_浅谈IOS和Android界面设计尺寸规范
  7. 俄罗斯计算机正博士,科学网—呃弱弱地说:俄罗斯正博士那算博士,咱们?嘿嘿都烂。 - 陈楷翰的博文...
  8. tcp_tw_recycle参数引发的故障
  9. 【C++】「一本通 1.1 例 5」智力大冲浪
  10. 运行openi_tracker 时遇到的问题