【畅购商城】微信支付模块之微信支付二维码

news2024/11/20 14:33:16

目录

流程分析

微信支付概述

账号申请

已有账号

​​​​​​​支付接口和SDK(了解)​​​​​​​

​​​​​​​入门案例

统一下单

​​​​​​​查询订单

​​​​​​​JS版二维码:QRCode.js

​​​​​​​概述

​​​​​​​入门案例

​​​​​​​流程分析

​​​​​​​微信支付概述

账号申请

步骤一:注册公众号,根据自身主体类型注册对应的公众号

只能申请服务号,订阅号没有办法申请支付

https://kf.qq.com/product/weixinmp.html#hid=87

步骤二:微信认证,公众号认证后才可申请微信支付

 

步骤三:申请微信支付

登录公众平台,点击左侧菜单【微信支付】,开始填写资料等待审核,审核时间为1-5个工作日内。

 

步骤四:商户账号审核

审核通过之后会往您填写的邮箱里发一封邮件是关于微信支付商户的帐号信息,同时您对公账户上也会收到几毛钱的汇款,需要您查看下具体的金额然后登录微信支付商户平台进行验证

步骤五:在线签署协议

本协议为线上电子协议,签署后方可进行交易及资金结算,签署完立即生效。

步骤六:完成上述步骤,你可以得到调用API用到的账号和密钥

appid:微信公众账号或开放平台APP的唯一标识

mch_id:商户号

key:商户密钥

​​​​​​​已有账号

以下为“传智播客”的微信支付账号

appid: wx8397f8696b538317

mch_id:1473426802

key: T6m9iK73b0kn9g5v426MKfHQH7X8rKwb

​​​​​​​支付接口和SDK(了解)​​​​​​​

微信支付帮助文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html

手动调用,常见的接口(了解)

接口

下订单

https://api.mch.weixin.qq.com/pay/unifiedorder

查询订单

https://api.mch.weixin.qq.com/pay/orderquery

关闭订单

https://api.mch.weixin.qq.com/pay/closeorder

手动调用整体思路:

根据接口要求,组装请求参数

以XML的方式,通过POST请求,发送给支付接口

微信支付接口,以XML方式给予响应

实际开发中,我们很少直接使用“接口操作”。通常情况下使用微信提供的SDK(工具类)

com.github.wxpay.sdk.WXPay类就是核心操作封装类。

方法名

说明

microPay

刷卡支付

unifiedOrder

统一下单

orderQuery

查询订单

reverse

撤销订单

closeOrder

关闭订单

refund

申请退款

refundQuery

查询退款

downloadBill

下载对账单

report

交易保障

shortUrl

转换短链接

authCodeToOpenid

授权码查询openid

​​​​​​​入门案例

统一下单

在测试项目完成操作:test-wxpay

步骤一:添加依赖

<dependency>
	<groupId>com.github.wxpay</groupId>
	<artifactId>wxpay-sdk</artifactId>
	<version>0.0.3</version>
</dependency>

步骤二:编写配置类,实现WXPayConfig接口

package com.czxy.test.pay;

import com.github.wxpay.sdk.WXPayConfig;

import java.io.InputStream;

/**
 * Created by liangtong.
 */
public class MyWXPayConfig implements WXPayConfig {
    /**
     * 应用ID:微信开放平台审核通过的应用APPID
     * @return
     */
    @Override
    public String getAppID() {
        return "wx8397f8696b538317";
    }

    /**
     * 商户号:微信支付分配的商户号
     * @return
     */
    @Override
    public String getMchID() {
        return "1473426802";
    }

    /**
     * 秘钥,用于生成签名(sign)
     * @return
     */
    @Override
    public String getKey() {
        return "T6m9iK73b0kn9g5v426MKfHQH7X8rKwb";
    }

    @Override
    public InputStream getCertStream() {
        return null;
    }

    /**
     * 连接超时时间,单位是毫秒
     * @return
     */
    @Override
    public int getHttpConnectTimeoutMs() {
        return 0;
    }

    /**
     * 读超时时间,单位是毫秒
     * @return
     */
    @Override
    public int getHttpReadTimeoutMs() {
        return 0;
    }
}

步骤三:测试类

package com.czxy.test.pay;

import com.github.wxpay.sdk.WXPay;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by liangtong.
 */
public class TestPayUnifiedOrder {
    public static void main(String[] args) throws Exception {

        WXPay wxPay = new WXPay(new MyWXPayConfig());

        Map<String,String> map=new HashMap();
        map.put("body","畅购");                          //商品描述
        map.put("out_trade_no","20200401001");         //订单号
        map.put("total_fee","1");                       //金额
        map.put("spbill_create_ip","127.0.0.1");      //终端IP
        map.put("notify_url","http://www.baidu.com");//回调地址
        //JSAPI--JSAPI支付(或小程序支付)、NATIVE--Native支付、APP--app支付,MWEB--H5支付
        map.put("trade_type","NATIVE");              //交易类型

        Map<String, String> result = wxPay.unifiedOrder( map );
        System.out.println("支付结果:" + result.get("code_url"));
        System.out.println("返回状态码:" + result.get("return_code"));
        System.out.println("返回信息:" + result.get("return_msg"));
        System.out.println("业务结果:" + result.get("result_code"));
        System.out.println(result);
    }
}

步骤四:结果

支付结果:weixin://wxpay/bizpayurl?pr=Mfqcl2R

返回状态码:SUCCESS

返回信息:OK

业务结果:SUCCESS

​​​​​​​查询订单

package com.czxy.test.pay;

import com.github.wxpay.sdk.WXPay;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by liangtong.
 */
public class TestPayOrderQuery {
    public static void main(String[] args) throws Exception {

        WXPay wxPay = new WXPay(new MyWXPayConfig());

        Map<String,String> map=new HashMap();
        map.put("out_trade_no","20200401001");         //订单号

        Map<String, String> result = wxPay.orderQuery( map );
        System.out.println("返回状态码:" + result.get("return_code"));
        System.out.println("返回信息:" + result.get("return_msg"));
        System.out.println("业务结果:" + result.get("result_code"));
        System.out.println("交易状态:" + result.get("trade_state"));
        /*
            SUCCESS—支付成功
            REFUND—转入退款
            NOTPAY—未支付
            CLOSED—已关闭
            REVOKED—已撤销(刷卡支付)
            USERPAYING--用户支付中
            PAYERROR--支付失败
         */
        System.out.println("交易状态:" + result.get("trade_state"));
        System.out.println("交易状态描述:" + result.get("trade_state_desc"));
        System.out.println(result);
    }
}

​​​​​​​JS版二维码:QRCode.js

​​​​​​​概述

QRCode.js 是一个用于生成二维码的 JavaScript 库。主要是通过获取 DOM 的标签,再通过 HTML5

Canvas 绘制而成,不依赖任何库。

​​​​​​​入门案例

拷贝 qrcode.min.js

编写wxpay.html

<html lang="en">
<head>
  <title>二维码入门案例</title>
</head>
<body>
  <div id='qrcode'></div>
</body>
</html>
<!-- 代码需要 -->
<script src="/js/qrcode.min.js" ></script>
<script type="text/javascript">
  let qrcode = new QRCode(document.getElementById("qrcode"), {
    width : 200,
    height : 200
  });
  qrcode.makeCode("weixin://wxpay/bizpayurl?pr=Mfqcl2R");
</script>
  1. http://localhost:3000/wxpay.html

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节跳动3-2专家强烈推荐入广告核心部门,要学的12大技术实战PDF

前言 你了解过字节跳动的薪资和职级是什么样的吗&#xff1f; 想必大家都对字节跳动的薪资和职级都有一定的了解了&#xff0c;下面就给大家介绍字节3-1专家推荐的进入字节跳动需要储备知识技能&#xff01;&#xff01;&#xff01; 应届生进入字节跳动的是711的学习路线&am…

Innodb如何实现表--下篇

Innodb如何实现表--下篇Innodb数据页结构File HeaderPage HeaderInfimum和Supremum RecordUser Records和Free SpacePage DirectoryFile Trailer实例分析Innodb数据页结构 Innodb数据页由以下7个部分组成: File Header(文件头) Page Header(页头) Infimun和Supremum Records U…

Abaqus二次开发:局部坐标系的建立与应用

问题描述 在单向复材中&#xff0c;纤维的力学性能往往是横观各向同性的&#xff0c;于是需要规定材料方向。 通常需要新建局部坐标系用于材料方向的定义&#xff0c;而在实际建立坐标系中&#xff0c;坐标系会储存在对应的Part下&#xff1a; mdb.models[‘Model-1’].parts[…

GraphQL基础使用--mongoDB数据库操作

GraphQL hello world 首先我们要安装好执行GraphQL的环境 因为其是运行在node服务器端的&#xff0c;所以我们要安装 express express-graphql graphql mongoose 安装好后的package.json文件是这个样子的 其次我们就要开始配置端口为3000的node服务器 const express requir…

Leetcode---2.两数之和

目录题目分析链表最终代码实现&#xff08;内含注释&#xff09;题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和…

护眼灯对眼睛真的有作用吗?一文了解市面上的护眼灯是否真的管用

我们都知道&#xff0c;现在越来越多的人开始使用护眼台灯照明了&#xff0c;不为别的&#xff0c;只为眼睛健康&#xff0c;所以同样的也有许多人质疑护眼灯是否真的对眼睛有效果&#xff0c;今天就来聊聊护眼灯是否真的有护眼作用。 在我看来&#xff0c;人体眼睛看任何事物…

TS201的通过外部中断IRQ0控制DMA传输(含参考代码)

外部中断控制DMA传输 DMA的原理就不多说了&#xff0c;之前的文章里有写。 电路中的Interrupt Pin ADSP-TS201 EZ-KIT Lite评估板上每片DSP含有4个外部中断(IRQ3–0 )&#xff0c;其中IRQ0接到了一个按键上&#xff08;SW4和SW5&#xff09;。 当按键按下时&#xff0c;表现…

西湖论剑 Flagshop 分析复现

前言 比赛时候没能做出来&#xff0c;其实这道题就是一道pwn题。后面与p w n师傅讨论分析EXP分析还原了解题过程。学到了很多&#xff0c;也希望分享给大家。 任意文件读取 抓包或者看源码就会发现有一个SSRF&#xff0c;但是没有权限读flag&#xff0c;测试发现存在一个readf…

全网惟一面向软件测试人员的Python基础教程-为什么要学Python

全网惟一面向软件测试人员的Python基础教程 起点&#xff1a;python软件测试实战宝典》目录 第一章 为什么软件测试人员要学习Python 文章目录全网惟一面向软件测试人员的Python基础教程前言一、Python是什么&#xff1f;二、为什么要学二、测试人员如何学二、怎么从0开始学Py…

旅行路线可视化研究与实现(Java+Android+Eclipse实现的旅游APP)

目 录 1 概论 1 1.1 研究现状 1 1.2 系统开发意义 1 1.3 系统开发背景 2 2 开发环境以及相关技术 5 2.1 Eclipse 5 2.2 Adroid 5 2.2.1 基本概念 5 2.2.2 简介 6 2.2.3 系统架构 6 2.2.4 四大组件 7 2.3 Java语言 7 2.4 SQLite 7 2.4.1 简介 7 2.4.2 架构 7 2.4.3 特点 8 2.5 F…

《Redis 深度历险:核心原理与应用实践》学习

1、Redis的5种基础数据结构 Redis的5种基础数据结构&#xff1a;string (字符串&#xff09;、list (列表 &#xff09;、hash (字典&#xff09;、 set (集合&#xff09;、zset (有序集合&#xff09;。 Redis所有的数据结构都以唯一的key字符串作为名称&#xff0c; 然后通…

基于粒子群优化算法的边缘链接用于边缘检测(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

艾美捷FLIVO探针:用于细胞活体凋亡检测,助力科研!

细胞凋亡在胚胎发育、造血、免疫系统的成熟以及维护正常组织和器官的细胞恒定与生长平衡&#xff0c;乃至机体衰老方面都起着重要作用。因此&#xff0c;有关凋亡的研究在临床和基础等各个领域已经广泛开展,凋亡细胞的检测方法显得非常重要。 FLIVO(荧光活体)是一种强大的无创检…

首个搭载8MP摄像头的单SoC行泊一体方案来袭,已拿下多家车企定点

行泊一体正在进入前装规模化上车的关键周期&#xff0c;但同时产品的升级战争也在全面爆发。 《高工智能汽车》了解到&#xff0c;国内领先的智能驾驶技术供应商——AutoBrain重磅推出了国内首个搭载800万像素摄像头的单SoC行泊一体方案。据悉&#xff0c;这是全球量产首发搭载…

dubbo消费者访问不到docker里面的生产者

版本 dubbo3.0.7 Docker version 20.10.21, build baeda1f docker zookeeper lastest 背景 一个dubbo的项目&#xff0c;生产者和消费者之间使用zookeeper管理。 现将消者和zookeeper部署到了docker中&#xff0c;二者使用的都是桥接网络。 消费者仍然在idea中编写逻辑。 服…

正片工艺、负片工艺,这两种PCB生产工艺的差异到底是什么?

在前文《什么是加成法、减成法与半加成法&#xff1f;》中&#xff0c;我们提到&#xff1a;减成法仍为当前PCB生产工艺的主流&#xff0c;那么&#xff0c;其中的两大代表工艺——正片工艺、负片工艺&#xff0c;又是怎样的呢&#xff1f; 请看下图&#xff1a; 当然&#xf…

一起用Go做一个小游戏(下)

打包资源使用file2byteslice包我们可以将图片和config.json文件打包进二进制程序中&#xff0c;之后编译生成一个二进制程序。然后拷贝这一个文件即可&#xff0c;不用再拷贝图片和其他配置文件了。golang有很多第三方包可以将打包资源&#xff0c;原理其实很简单——读取资源文…

面试官:使用 RocketMQ 怎么进行灰度发布?

今天来聊一聊 RocketMQ 的灰度方案。 灰度发布是指在黑与白之间&#xff0c;平滑过渡的一种发布方式。在大流量的系统中&#xff0c;如果一次升级改造范围比较大&#xff0c;或者影响内容不太确定&#xff0c;一般会采用切量的方式进行升级&#xff0c;这样可以减少生产变更带…

面试官:MySQL 中 varchar(n) 中 n 最大取值为多少?

前置知识 要回答这个问题&#xff0c;首先我们得先知道 MySQL 存储一条记录的格式长什么样子。 以 Compact 行格式作为例子&#xff0c;它长这样&#xff1a; 可以看到&#xff0c;一条完整的记录分为「记录的额外信息」和「记录的真实数据」两个部分。 这里重点讲讲记录的…

探究L298N模块烧毁的原因

目录 基础介绍 代码思路 基础介绍 L298N电机驱动版主要由两个核心组件构成&#xff1a; L298N 驱动芯片78M05 稳压器型号&#xff1a; L298N封装&#xff1a; Multiwatt15V 描述&#xff1a;电源电压&#xff1a;4.5V~46V 特性&#xff1a;过流保护(OCP)&#xff1b;过热保…