刚做完公众号微信支付,记录一下。获取微信支付之前,要先获取用户的基本信息哦!

前端使用uniapp开发的H5,小伙伴们可以照着改一下对应语法
首先来个微信支付的工具类 wxApi.js,这里我放到了项目下的common目录下,代码如下:

/*微信(公众号)支付方法
*/
const wx = require('jweixin-module');
const wexinPay = (data, callback, errorCallback) => {let [appId, timestamp, nonceStr, signature, packages, sign] = [data.appId, data.timeStamp, data.nonceStr, data.sign,data.package, data.sign];wx.config({debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId, // 必填,公众号的唯一标识timestamp, // 必填,生成签名的时间戳nonceStr, // 必填,生成签名的随机串signature, // 必填,签名,见附录1jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2});WeixinJSBridge.invoke('getBrandWCPayRequest', {appId: appId, //公众号名称,由商户传入timeStamp: timestamp, //时间戳,自1970年以来的秒数nonceStr: nonceStr, //随机串package: data.package,signType: data.signType, //微信签名方式:paySign: sign //微信签名},function(res) {if (res.err_msg == 'get_brand_wcpay_request:ok') {// 使用以上方式判断前端返回,微信团队郑重提示://res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。//支付成功回调callback(res)/* if (res.err_msg == 'get_brand_wcpay_request:cancel') */} else{//支付失败回调errorCallback(res)}})
}export default {wexinPay
}

然后在页面中调用这个工具类就可以了,调用代码如下:

this.$wxPay(payInfo, function(res) {uni.setStorageSync('type', '1')uni.showToast({title: '支付成功!',duration: 3000})uni.reLaunch({url: './xxx'})}, function(e) {uni.showToast({title: '支付失败!',duration: 3000})})

我跳转到了另一个页面,在另一个页面判断type是否等于1,等于1时,修改对应用户表和订单日志表

后端接口代码如下:
String appID = xxx;
String mchID =xxx; //商户号
String appSecret = xxx;
String key = “xxx”;

@Autowired
private PayLogService payLogService;
@PostMapping("/xxx")
public CommonResult wxjspay(HttpServletRequest request,PayLog payLog,@RequestParam(value="openid",required = false)String openid,@RequestParam(value="uid",required = false)String uid) throws Exception {//创建sdk客户端WXPay wxPay = new WXPay(new WXPayConfigCustom());//构造请求的参数Map<String,String> requestParam = new HashMap<>();//生成订单号 时间戳+用户id+6位随机数Integer ranNum = Math.toIntExact(Math.round((Math.random() + 1) * 1000));String tradeNo = System.currentTimeMillis()/1000+uid+ranNum;System.out.println("订单号==="+tradeNo);requestParam.put("out_trade_no",tradeNo);//订单号requestParam.put("body", "vip");//订单描述requestParam.put("fee_type", "CNY");//人民币requestParam.put("total_fee", String.valueOf(payLog.getPrice())); //金额requestParam.put("spbill_create_ip", IPUtils.getIpAddr(request));//客户端iprequestParam.put("notify_url", "none");//微信异步通知支付结果接口,暂时不用requestParam.put("trade_type", "JSAPI");log.info("ip地址==="+requestParam.get("spbill_create_ip"));requestParam.put("openid",openid);//调用统一下单接口Map<String, String> resp = wxPay.unifiedOrder(requestParam);Map resultMap = new HashMap();System.out.println("resp===="+resp.toString());System.out.println("resp.get(\"result_code\"====)"+resp.get("result_code"));if(resp.get("result_code").equals("SUCCESS")){System.out.println("同意下单接口==="+resp.toString());//准备h5网页需要的数据Map<String,String> jsapiPayParam = new HashMap<>();jsapiPayParam.put("appId",appID);jsapiPayParam.put("timeStamp",System.currentTimeMillis()/1000+"");jsapiPayParam.put("nonceStr", UUID.randomUUID().toString());//随机字符串jsapiPayParam.put("package","prepay_id="+resp.get("prepay_id"));jsapiPayParam.put("signType","HMAC-SHA256");jsapiPayParam.put("sign", WXPayUtil.generateSignature(jsapiPayParam,key, WXPayConstants.SignType.HMACSHA256));//将h5网页响应给前端System.out.println("111==="+jsapiPayParam.toString());//将数据添加到支付表payLog.setPubopenId(openid);payLog.setTransaction_id(tradeNo);payLog.setTotal_fee(240000);payLog.setResult_status(1);payLog.setResult_code(resp.get("result_code"));payLog.setReturn_code(resp.get("return_code"));payLog.setReturn_data(resp.get("return_data"));payLogService.addPayLog(payLog);resultMap.put("tradeNo",tradeNo);resultMap.put("jsapiPayParam",jsapiPayParam);return new CommonResult(200,"查询成功",resultMap);}else{return new CommonResult(100500,resp.get("err_code_des"));}
}
class  WXPayConfigCustom extends WXPayConfig {@Overrideprotected String getAppID() {return appID;}@Overrideprotected String getMchID() {return mchID;}@Overrideprotected String getKey() {return key;}@Overrideprotected InputStream getCertStream() {return null;}@Overrideprotected IWXPayDomain getWXPayDomain() {return new IWXPayDomain() {@Overridepublic void report(String s, long l, Exception e) {}@Overridepublic DomainInfo getDomain(WXPayConfig wxPayConfig) {return new DomainInfo(WXPayConstants.DOMAIN_API,true);}};}
}

微信公众号实现微信支付(含前后端完整代码)相关推荐

  1. 微信公众号模板消息推送(附上完整代码)

    官方文档 会用到的调用函数 import logging import requests import time from pickle import dumps, loadsfrom request ...

  2. JAVA版开源微信管家—JeeWx捷微3.1小程序版本发布,支持微信公众号,微信企业号,支付窗

    支持小程序,JeeWx捷微3.1小程序版本发布^_^ JeeWx捷微V3.1--多触点小程序版本管理平台(支持微信公众号,微信企业号,支付窗) JeeWx捷微V3.1.0版本紧跟微信小程序更新,在原有 ...

  3. JeeWx捷微3.0多触点版本发布,支持微信公众号,微信企业号,支付窗——喜迎双“旦”

    喜迎双旦,JeeWx捷微3.0多触点版本发布^_^ JeeWx捷微V3.0--多触点版本管理平台(支持微信公众号,微信企业号,支付窗) JeeWx捷微V3.0.0版本是一个颠覆和跨时代版本,官方团队历 ...

  4. 微信公众号:支付宝支付

    微信公众号:支付宝支付 微信公众号:支付宝支付 由于支付宝月微信是两个对立的企业,支付宝想介入微信的充值,微信发现就将其规避,在支付宝与微信博弈的过程中,双方一直是处于你争我赶的地步. 微信公众号接入 ...

  5. php 微信支付闪了一下,php,_微信公众号JS API支付,安卓没有效果(会闪一下就消失了),php - phpStudy...

    微信公众号JS API支付,安卓没有效果(会闪一下就消失了) 代码如下,ios可以支付,但是到安卓手机上就会出现微信支付读条(那三个点),然后就消失了,没有跳出输入密码支付的界面.... //调用微信 ...

  6. PHP 支付PC端扫码支付、APP接口调起支付宝支付、微信公众号接入支付宝支付

    第一:第三方支付原理 第二:支付接口申请流程 地址:https://docs.open.alipay.com/270/105899/ : 参考地址:https://blog.csdn.net/nove ...

  7. HTML5微信支付和微信公众号内微信支付(VUE)

    实现html5微信支付以及微信公众号内微信支付 微信公众号内微信支付 首先进行微信授权获取code /*获取授权拿到code*/getCodeApi(state){//获取codelet urlNow ...

  8. 淘宝客CMS,微信公众号,微信淘客机器人

    淘宝客CMS,微信公众号,微信淘客机器人一站式淘客导购解决方案 先来写个序 楼主程序员,两耳不闻窗外事,一心只知敲代码,2019年前没接触过淘客,也不懂淘客是什么? 后来有个朋友给我提到,说他在做淘客 ...

  9. python 微信公众号,微信小程序wechatpy的使用

    第一章 Python 微信公众号,小程序入门之wechatpy的使用 文章目录 第一章 Python 微信公众号,小程序入门之wechatpy的使用 前言 一.wechatpy是什么? 二.微信公众号 ...

  10. 微信公众号:微信H5页面JSAPI充值

    微信公众号:微信H5页面JSAPI充值,遇到的一些坑,以及解决方式. 首先说一下微信充值分为很多种:目前我所涉及到的只是APP支付.H5支付.JSAPI支付. 区别: 1.根据不同场景 APP支付:是 ...

最新文章

  1. 找不到工作,一程序员去帮屠夫卖猪肉 | 每日趣闻
  2. 在Spring Framework中@Inject和@Autowired有什么区别? 在什么条件下使用哪一个?
  3. python leetcode_python实现leetcode中无重复字符的最长字串
  4. mysql+create+table+index_mysql------基础及常见SQL技巧
  5. python3环境变量_配置环境变量切换到python3.7
  6. tcpsyn发生在哪层_必看面试题之计算机网络:来自一位拿到了腾讯和字节双offer的大佬...
  7. 分享一个.NET(C#)按指定字母个数截断英文字符串的方法–提供枚举选项,可保留完整单词...
  8. html取php值,使用PHP从HTML中提取值
  9. [Spark]-结构化数据查询之自定义UDAF
  10. 15个最佳iOS游戏模板
  11. 计算机导论知识体系,《计算机导论》课程知识体系结构研究
  12. 台积电多人离职:老婆受不了
  13. x光安检图像检测数据集(7500多张图像,VOC标签)
  14. AR增强图像——Vuforia图片识别配置以及使用
  15. as 贪食蛇小游戏(一)
  16. [Win10] 代理服务器出现问题或地址有误
  17. SecureCRT登录会话密码解密
  18. 2017年最新App Store审核指南(官方)
  19. UGF游戏框架实例开发教程—FlappyBird(七)子弹发射与小鸟飞行功能的实现
  20. Java 图片添加数字暗水印工具类

热门文章

  1. unity 3D期末大作业-简单坦克射击游戏
  2. python 字母查找
  3. php 无父类 用parrent,Leaflet_扩展Leaflet:类(2017-10-26)
  4. 构建红图注册到蓝图中
  5. Golang 之 IED 安装(mac)
  6. 微信网页版web通讯全解析(最新,持续更新,附源码)
  7. Excel 入门基础
  8. android人脸情绪识别器,Emotion Recognition微软人脸情绪识别器
  9. Carson带你学Android:这是一份全面 详细的Android代码命名规范
  10. 复化梯形公式matlab实验报告_复化梯形公式matlab