微信付款码支付

微信支付--理论 之前一个商城系统(微信小程序),使用过微信支付和微信退款功能,现在总结一下 购物支付流程:下单--》 微信退款:用户对该订单申请退款 ;商户在商城管理端同意退款,实现微信退款 微信支付包括: 公众号支付 小程序支付 扫码支付 H5支付 app支付 刷卡支付 openId: 为了识别用户,每个用户针对每个公众号或小程序等应用产生一个operId 。公众号或小程序应用将openId存储在数据库中,便于下次登录时辨识其身份。 小程序部署: https://mp.weixi.. 阅读详情

1.微信付款码支付,相比微信小程序支付和微信Native支付,不用传trade_type,需要多传一个auth_code(付款码code) ,调用微信支付sdk的microPay()方法
2.频繁使用付款码支付的话会让输入密码,输入密码的同时扫码付款不会阻塞住而是会直接返回付款失败,这时候需要重新扫码付款,如果用户扣款成功了,商户会显示付款成功

后端代码

@PostMapping("/scanCodePayOrder")
    @ApiOperation("微信扫码支付")
    public R scanCodePayOrder(@RequestBody ScanCodePayOrderForm form,@RequestHeader Map<String,Object> header){
        ValidatorUtils.validateEntity(form);
        String token = header.get("token").toString();
        Integer userId = Integer.parseInt(jwtUtils.getClaimByToken(token).getSubject());
        LambdaQueryWrapper<UserEntity> uew = new LambdaQueryWrapper<>();
        uew.eq(UserEntity::getUserId, userId);
        UserEntity user = userService.getOne(uew);
        if (user == null) {
            return R.error("用户不存在!");
        }
        LambdaQueryWrapper<Order> oew = new LambdaQueryWrapper<>();
        Integer orderId = form.getOrderId();
        oew.eq(Order::getId, orderId);
        Order order = orderService.getOne(oew);
        if (order == null) {
            return R.error("该用户没有此订单!");
        }
        if (!Objects.equals(order.getStatus(), EnumUtil.PAY_STATUS_NO_PAY.getCode())) {
            return R.error("该订单已支付!");
        }
        //判断优惠券是否过期


        //判断活动是否过期


        //向微信平台发送创建支付订单的请求

        try {
            //微信支付的单位是分,要转换一下
            String amount = String.valueOf(order.getAmount().multiply(BigDecimal.valueOf(100)).intValue());
            WXPay wxPay = new WXPay(wxPayConfig);
            Map<String, String> paramMap = new HashMap<>();
            String nonceStr = WXPayUtil.generateNonceStr();
            paramMap.put("nonce_str", nonceStr);    //随机字符串
            paramMap.put("body", "商品备注信息");
            paramMap.put("out_trade_no", order.getCode());   //商品订单流水号,必须为一
            paramMap.put("total_fee", amount);              //订单金额
            paramMap.put("spbill_create_ip", "127.0.0.1");
            paramMap.put("auth_code", form.getAuthCode());
            String sign = WXPayUtil.generateSignature(paramMap, wxConfiguration.getMchKey());
            paramMap.put("sign", sign);
            Map<String, String> result = wxPay.microPay(paramMap);
            log.info("result:{}",result);
            String resultCode = result.get("result_code");
            String returnCode = result.get("return_code");
            if (!"SUCCESS".equals(resultCode) || !"SUCCESS".equals(returnCode)) {
                return R.error("付款失败");
            }

            //支付订单Id
            String prepayId = result.get("transaction_id");
            if (StringUtils.isNotBlank(prepayId)) {
                order.setPrepayId(prepayId);
                order.setStatus(EnumUtil.PAY_STATUS_PAIED.getCode());
                order.setPaymentType(EnumUtil.WX.getCode());
                orderService.updateById(order);
                return R.ok("付款成功");
            }else {
                log.error("微信支付出现异常,订单号:{}",orderId);
                return R.error("微信支付出现异常,订单号:{}" + orderId);
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("微信支付出现异常,订单号:{}",orderId);
            return R.error("微信支付出现异常,订单号:{}" + orderId);
        }
    }

前端js代码

$(function () {
  /* 查询订单详情 */
  $.ajax({
    url: wxUrl.searchOrderById,
    type: 'post',
    dataType: 'json',
    contentType: 'application/json',
    beforeSend: function (request) {
      request.setRequestHeader('token', localStorage.getItem('token'));
    },
    data: JSON.stringify({
      orderId: 2,
    }),
    success(res) {
      // console.log(res);
      if (res.code == 0) {
        let order = res.order;
        if (order.status === 1) {
          order.status = '未付款';
        } else if (order.status == 2) {
          order.status = '已付款';
        } else if (order.status == 3) {
          order.status = '已发货';
        } else if (order.status == 4) {
          order.status = '已签收';
        }
        let code = order.code;
        let amount = order.amount;
        let status = order.status;
        let date = order.createTime;
        $('#code').text(code);
        $('#status').text(status);
        $('#amount').text(amount);
        $('#pay').text(amount);
        $('#date').text(date);
        $('.pay-btn').attr('data-order-id', order.id);
        if (status == '已付款') {
          $('pay-btn').attr('disabled', true);
          $('.pay-btn').css({
            'background-color': '#666',
          });
        }
      }
    },
  });
  /* 点击付款,使用键盘事件输入付款码的authCode 进行扣款 */
  $('.pay-btn').click(function () {
    $('.pay-btn').attr('disabled', true);
    $('.message').text('扫码中,请不要做其他操作!');
    let authCode = '';
    //给当前页面绑定键盘事件输入authCode
    $(document).bind('keydown', function (event) {
      //authCode输入完成之后,点击回车
      if (event.keyCode == 13) {
        console.log('authCode' + authCode);
        let orderId = $('.pay-btn').data('order-id');
        $.ajax({
          url: wxUrl.scanCodePayOrder,
          type: 'post',
          dataType: 'json',
          contentType: 'application/json',
          beforeSend: function (request) {
            request.setRequestHeader('token', localStorage.getItem('token'));
          },
          data: JSON.stringify({
            orderId: orderId,
            authCode: authCode,
          }),
          success(res) {
            console.log(res);
            if (res.msg == '付款成功') {
              $(document).unbind('keydown');
              $('.message').text('付款成功!');
              setTimeout(() => {
                location.reload();
              }, 1000);
            } else {
              $('.message').text('付款失败!');
            }
          },
        });
        /* 如果让输入密码,则会直接返回支付失败,此时按esc键,重新扫码支付即可,不会重复支付此订单 */
      } else if (event.keyCode == 27) {
        $(document).unbind('keydown');
        $('.message').text('支付设备已经准备好');
        $('.pay-btn').removeAttr('disabled');
      }
      let ch = String.fromCharCode(event.keyCode);
      authCode += ch;
    });
  });
});

PHP-SDK实现微信付款码支付 一、实战 目前刷脸支付市场启动之初,微信自然也提供了刷脸支付的功能,今天要整理的笔记 服务商微信付款码支付。 第一步 完成微信商户号的注册流程 【商户号注册请打开微信支付https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F】 【付款码支付请打开微信支付https://pay.weixin.qq.com/sta... 阅读详情

相关推荐

springboot集成微信支付服务商版之付款码支付

springboot集成微信支付服务商版之付款码支付 一、说明: 通过引入依赖实现微信支付,是非常方便的; 但是官方的SDK没有服务商版,以下是在原SDK的基础上封装了服务商版,共勉; 二、开发步骤 1.在pom.xml中引入依赖 <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.

lucky-会飞的猪的博客 883

微信支付-Native支付(网页二维码扫码微信支付)简单示例

使用Native支付实现网页生成支付二维码成功支付,简单案例。

maohe的博客 1万+

微信--java实现付款码支付

第一步需要注册微信公众号,在微信公众号里面微信回给我们分配的开发者ID(AppID) 以及开发者密码(AppSecret) ,这两个需要我们妥善保管。String result = MyWXPay.scanCodeToPay("请填写测试微信二维码信息");* 该域名是否为主域名。这里主要写我在开发过程中具体实现,一个简单的jsp+servlet开发,需要下载官方的demo。/*String certPath = "自己商户平台下载的证书";map.put("attach", "订单额外描述");

wjianwei666的专栏 585

微信扫码支付遇到的问题

1、沙箱环境需要调用接口生成一个沙箱的key,替换原来的key才行 代码如下 /** * 获取沙箱的key(沙箱测试时需要获取沙箱key) * @return */ public String getSandboxSignKey() { try { MyWXPayConfig config = getC...

fuck487的博客 2588

arcgis select by attributes一次选多个_视频:如何基于ArcGIS与GeoDa求莫兰指数和绘制莫兰散点图?...

莫兰指数是全域莫兰指数(Global Moran's I)的简称,是澳大利亚统计学家帕特里克·阿尔弗雷德·皮尔斯·莫兰(Patrick Alfred Pierce Moran),在1950年提出的。详细介绍,如下:莫兰指数取值范围在-1.0至1.0之间。当Moran's I >0时,表示空间正相关性,其值越大,空间相关性越明显;当Moran's I <0时,表示空间负相关性...

weixin_39948247的博客 1759

FPGA实战:手把手教你实现雷达信号数字下变频(DDC)完整流程

本文提供了一份完整的FPGA实现雷达信号数字下变频(DDC)的实战指南。内容涵盖从Matlab行为级仿真到FPGA硬件实现的完整闭环流程,详细讲解了数字混频、滤波、抽取等核心步骤,并分享了基于Vivado的IP核配置、数据位宽量化及资源优化等关键工程实践经验,旨在帮助读者掌握DDC系统的硬件实现与调试。

dog123的博客 340

Web整合微信支付

08、微信支付:扫码支付流程 1)介绍 微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/index.html 然后选中v2版本 我们选择开发文档,而后进入选择页面: https://pay.weixin.qq.com/wiki/doc/api/index.html 选择native支付,就是扫码支付: 此处我们使用模式二来开发: 2)开发流程 模式二与模式一相比,流程更为简单,不依赖设置的回调支付URL。 商户后台系统先调用微信支付的统一下单接口,微信

weixin_42914989的博客 3770

[VisionPro] CogPMAlignTool 工具详解

[VisionPro] [CogPMAlignTool] [模板匹配]

weixin_43163656的博客 1万+

微信二维码API支付实现demo

有了发送亲求的方式后就需要拼接参数向官网提供的网址发送请求,在发送请求后返回二维码的字符串,在通过前端的解析获取字符串。商户号的申请需要填写相关材料,签署电子协议等,申请后需要准备4个代码串。安装:npm install vue-qriously。该插件专门用于对微信的code进行二维码展示。在主vue中绑定value值,就可以显示结果。前端的实现需要单独使用一个工具。

市民景先生 3737

科研人必备!用WisPaper搭建个人文献知识库的完整指南(附Zotero联动技巧)

本文详细介绍了如何利用WisPaper搭建高效的个人文献知识库,包括文件命名标准化、文件夹结构设计、语义搜索技巧及与Zotero的深度联动方法。通过智能标签系统和知识图谱功能,科研人员可以快速定位关键文献,提升研究效率。特别适合需要管理大量学术文献的研究者。

weixin_30823001的博客 266

手把手教你学pcie--(PCIe) 写请求的流程

通过上述流程,我们可以看到PCIe写请求的完整过程,包括请求的构建、发送、接收、处理和响应。这种请求-响应模型确保了数据传输的可靠性和有序性。

MHD0815的博客 158

java开发微信付款码支付

@[clownss] java开发微信付款码支付 微信支付–付款码支付 写在前面的话,各位大佬,晚上好!今儿是小弟第一次发表博客,我是一名刚入行的程序员,写的不好或是不对的地方,希望各位见谅。还请各位大佬能够指导,给予小弟一份帮助。谢谢大家!今天写的是我最近研究的微信付款码支付的一个小demo。 官方地址:https://pay.weixin.qq.com/wiki/doc/api/index....

weixin_42991261的博客 8899

华为OD新系统机试真题-8位LED控制器(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题【8位LED控制器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月19号机试真题【8位LED控制器】

qq_45776114的博客 596

付款码支付-微信和支付宝付款码类型标识

聚合扫码支付常用的方式为微信 和 支付宝,在实际创建订单发起交易时要区分支付三方类型,这时主要是通道付款码的前两位标识来区分: 付款码规则: 支付宝付款码,25-30 开头的长度为 16-24 位的数字,实际字符串长度以开发者获取的付款码长度为准。示例值:28763443825664394支付宝付款码支付 微信扫码支付付款码,设备读取用户微信中的条码或者二维码信息 (注:用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头) 示例值:1200610988280094...

tm986432677的博客 6047

OBC_开环扫频波特图拟合操作流程(结合 Simulink)

摘要: 本文详细介绍了基于Simulink的开环扫频波特图测试与拟合流程,适用于电源/控制系统(如LLC/PFC)的小信号分析。主要内容包括:1)前期准备(测试点选择、信号范围设定);2)Simulink建模方法(信号注入、数据记录);3)两种扫频方式(逐频正弦/Chirp扫频)的实现;4)MATLAB数据处理(FFT分析、传递函数拟合);5)线性分析工具使用技巧。重点强调了激励信号幅值控制、稳态数据采集及模型验证方法,并提供完整MATLAB脚本示例。该流程可有效获取系统频域特性,为控制器设计提供可靠依据。

Sumerking的博客 232

【深度学习新浪潮】算力行业的核心技术有哪些?

算力行业核心技术是芯片+互联+存储+调度+能效+软件的全栈协同:芯片提供算力、互联打通集群、存储保障数据、调度提升效率、能效支撑规模、软件释放算力。当前AI大模型推动算力从“单机”走向“万卡级超节点集群”,技术竞争从单一芯片升级为系统级、全栈化的综合能力。

专注:太空算力、AI infra、异构调度、大模型成本工程 338

微信付款码扫码枪支付

微信付款码扫码枪支付 https://pay.weixin.qq.com/wiki/doc/api/index.html https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1 场景介绍 步骤1:用户选择付款码支付,付款码打开路径:微信->“我”->“钱包”->“收付款”; 步骤2:收银员在商户...

weixin_30287169的博客 5022

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

微信和支付宝付款码条码规则

微信条码规则:用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头 支付宝条码规则:付款码将由原来的28开头扩充到25-30开头,长度由原来的16-18位扩充到16-24位。 ...

JOE 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

在线支付篇(微信)——native方式(付款码支付)

前一段时间由于项目功能的需要,需要支持几种在线支付。之前也没有解除过这一方面。下面来说说我期中的一种很常用的支付方式吧——微信支付。 这篇文章能,主要用来记录一下我实现微信支付的付款码支付和jsapi支付(jsapi支付也就是基于微信公众号的H5支付),一方面能加深一下自己的印象,以防以后遇到这个功能方便查看,一方面希望可以给大家遇到这样的功能提供一点点的参考吧。废话不多说。 微信支付商户平台,这些我这边就直接过了,如何申请,如何开通网上有许多,我就不多说了。 付款码支付 微信官方链接:https://pa

多喝凉白开 3302

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

支付宝和微信支付用户付款码条码规则

微信:(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1) 用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头 支付宝:(https://opendocs.alipay.com/open/194/106039/) 用户付款码,25-30 开头的长度为 16-24 位的数字,实际字符串长度以开发者获取的付款码长度为准,付款码使用一次即失效,即使支付失败也需刷新 ...

从兄的博客 4031

微信支付宝付款码规则

微信用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头 链接:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1 支付宝付款码:付宝将会在2017年9月底对支付宝的用户付款码做升级处理。付款码将由原来的28开头扩充到25-30开头,长度由原来的16-18位扩充到16-24位 链接:htt...

zhishiheng的专栏 3494

微信、支付宝付款码规则

微信: 用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头 支付宝: 25~30开头的长度为16~24位的数字,实际字符串长度以开发者获取的付款码长度为准 ...

geng1kang的博客 4436

微信支付开发(6)--付款码支付(被扫)开发详解

用户打开付款码,商户使用扫码枪等设备扫码用户的付款码完成支付,注意此时用户的二维码是被商户扫描的。

编程副队长 7907

微信和支付宝付款码条码规则(官方)

支付宝:https://docs.open.alipay.com/194/106039/ 用户付款码,25-30 开头的长度为 16-24 位的数字,实际字符串长度以开发者获取的付款码长度为准;付款码使用一次即失效 微信:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1 用户付款码条形码规则:18位纯数字,以1...

K. 1万+

微信支付宝付款码code

微信条码规则:用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头 支付宝条码规则:付款码将由原来的28开头扩充到25-30开头,长度由原来的16-18位扩充到16-24位。 ...

你如今的气质里,藏着你走过的路,经历过的事,读过的书,和爱过的人。 2020

springboot集成微信支付普通商户版之付款码支付

springboot集成微信支付之付款码支付 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码

lucky-会飞的猪的博客 1213
上一篇: 微信native支付
下一篇: AspectJ中JoinPoint和ProceedingJoinPoint注解的使用
livel_java
博客等级 码龄9年 2916粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值