热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信扫码支付使用入门

第一章微信扫码支付介绍​微信扫码支付就是我们目前生活中最常使用的移动端支付方式之一。第二章微信支付必要条件​我们要完成微信支付,那么我们客户自己是付款方,那么收款方呢?所以在这里我

文章目录[隐藏]

  • 第六章 二维码生成介绍

第一章 微信扫码支付介绍

​ 微信扫码支付就是我们目前生活中最常使用的移动端支付方式之一。

第二章 微信支付必要条件

​ 我们要完成微信支付,那么我们客户自己是付款方,那么收款方呢?所以在这里我们需要一个收款方。那么要能够成为微信扫码支付的收款方,我们需要去申请微信的服务号,然后去开通扫码支付。(这个服务号个人无法申请,在这里不做教程说明)

微信支付使用入门

第三章 微信支付流程介绍

微信支付模式介绍

模式一:商户必须在公众平台后台设置支付回调URL。

模式二:调用微信的接口,获取支付的地址。

在这里,我无法登陆后台,所以选择使用模式二。

模式二开发流程介绍

微信支付

根据上述的时序图,得到如下的流程:注意上图中红色部分就是我们开发者需要做的部分

(1)商户后台系统根据用户选购的商品生成订单。

(2)用户确认支付后调用微信支付【统一下单API】生成预支付交易.

(3)微信支付收到请求后生成预支付交易单,并返回交易会话的二维码链接code_url

(4)商户后台系统根据返回的code_url生成二维码。

(5)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。

(6)微信支付系统收到客户端请求,验证链接有效性后发起用户支付,要求用户授权。

(7)用户在微信客户端输入密码,确认支付后,微信客户端提交授权。

(8)微信支付系统根据用户授权完成支付交易。

(9)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。

(10)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。

(11)未收到支付通知的情况,商户后台系统调用【查询订单API】。

(12)商户确认订单已支付后给用户发货。

第四章 核心流程所涉及的功能代码

1.调用微信的【统一下单API】,会的到微信支付的地址code_url

2.根据code_url生成二维码

3.调用【查询订单API】,查询微信支付的结果。

第五章 统一下单api代码说明

首先需要下载微信支付的jar包【SDK与DEMO下载】

其中,企业公众号id、api秘钥、商户账号需要申请服务号才能拥有,可以查看第二章,这里公司隐私,不能透露

收款方的配置文件

public class MyConfig implements WXPayConfig {   //获取 App ID(企业方公众号Id)
   @Override
   public String getAppID() {       return "*****************";   }    //获取 API 密钥
   @Override
   public String getKey() {       return "*****************";   }   //获取 Mch ID(商户账号)
   @Override
   public String getMchID() {       return "****************";   } ​   //获取商户证书内容(我们这里不需要证书)
   @Override
   public InputStream getCertStream() {       // TODO Auto-generated method stub
       return null;   } ​   //HTTP(S) 连接超时时间,单位毫秒
   @Override
   public int getHttpConnectTimeoutMs() {       // TODO Auto-generated method stub
       return 8000;   } ​   //HTTP(S) 读数据超时时间,单位毫秒
   @Override
   public int getHttpReadTimeoutMs() {       return 10000;   } }

统一下单DEMO

详细参数点击【统一下单API】

public class WXPayUtils {

public static void main(String[] args) throws Exception {

MyConfig cOnfig= new MyConfig();

//加载微信支付的企业参数

WXPay wxpay = new WXPay(config);

//设置微信支付的参数

Map data = new HashMap();

//商品的描述

data.put("body", "estore商城");

//订单号,订单号必须唯一。自己测试请切换其他订单号

data.put("out_trade_no", "20160909105sss00000012");

//设备号,无关

data.put("device_info", "");

//币种 人民币

data.put("fee_type", "CNY");

//支付金额

data.put("total_fee", "50");

data.put("spbill_create_ip", "123.12.12.123");

//异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。我们不适用异步通知,但是这里的参数必须要有

data.put("notify_url", "http://www.example.com/wxpay/notify");

data.put("trade_type", "NATIVE"); // 此处指定为扫码支付

data.put("product_id", "12");

try {

Map resp = wxpay.unifiedOrder(data);

for(Map.Entry entry:resp.entrySet()){

String key = entry.getKey();

String value = entry.getValue();

System.out.println(key+":"+value);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

输出结果

输出结果是一个map集合,map集合的详细参数介绍同样点击【统一下单API】,重点是,获取map集合中的key为code_url的值,这个就是微信支付的地址。

微信扫码支付入门

第六章 二维码生成介绍

我们通常扫描二维码,其实可以发现访问了一个地址。说白了,二维码的本质就是一个网络资源的地址。二维码的生成是通过js插件生成的。
【qrcode.js下载】

 
 
 
     
     
 
 
   
         

结果如图:

微信扫码支付使用入门

切换参数中的百度的地址为我们第五章中生成的支付地址weixin://wxpay/bizpayurl?pr=XmGVcaw

第七章 查询订单API代码说明

详细参数请参考【查询订单API】

public static void main(String[] args) throws Exception {

//加载企业参数

MyConfig cOnfig= new MyConfig();

WXPay wxpay = new WXPay(config);

//设置需要查询的订单的单号

Map data = new HashMap();

data.put("out_trade_no", "20160909105s6s00000012");

//输出查询的结果

try {

Map resp = wxpay.orderQuery(data);

/*

trade_state代表的就是订单支付结果

SUCCESS—支付成功

REFUND—转入退款

NOTPAY—未支付

CLOSED—已关闭

REVOKED—已撤销(刷卡支付)

USERPAYING--用户支付中

PAYERROR--支付失败(其他原因,如银行返回失败)

*/

for(Map.Entry entry:resp.entrySet()){

String key = entry.getKey();

String value = entry.getValue();

System.out.println(key+":"+value);

}

} catch (Exception e) {

e.printStackTrace();

}

}

返回值同样是一个map集合,其中trade_state的key所对应的值就是订单的交易状态。

参数结果:

微信扫码支付入门

第八章:总结

1.必须申请公众号,获取微信支付的参数。

2.在MyConfig中设置微信支付的参数

3.调用微信支付的下单的api,填写指定参数,获取支付的url地址

4.调用现有的js,给定指定的url地址参数,生成扫码支付的二维码地址

5.后台轮询查询订单的支付状态




推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
author-avatar
枪手杰_863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有