网站链接: ngui
当前位置: 首页 > 学习教程  > 互联网媒体

Java=微信支付详解与日志记录详解

2020/12/26 22:10:15 人评论 文章标签: 微信怎么用指纹支付

一.二维码: (1)什么是二维码 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。 &…

一.二维码:

(1)什么是二维码

二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

(2)二维码优势:

  • 信息容量大, 可以容纳多达1850个大写字母或2710个数字或500多个汉字

  • 应用范围广, 支持文字,声音,图片,指纹等等...

  • 容错能力强, 即使图片出现部分破损也能使用

  • 成本低, 容易制作

(3)二维码容错级别

  • L级(低) 7%的码字可以被恢复。

  • M级(中) 15%的码字可以被恢复。

  • Q级(四分)25%的码字可以被恢复。

  • H级(高)30% 的码字可以被恢复。

(4)二维码生成插件QRCode

就与jquery开发的一个插件,QRCode是一款基于HTML5 Canvas的纯JS二维码生成插件

下载地址:https://github.com/davidshimjs/qrcodejs

QRCode.js二维码插件的可用配置参数如下:

textString"https://www.baidu.com"需要编码为二维码的值
widthNumber256二维码的宽度,单位像素。
heightNumber256二维码的高度,单位像素。
colorLightString"white"二维码的背景颜色。
参数类型默认值描述
colorDarkString"black"二维码的前景颜色。
correctLevelStringQRCode.CorrectLevel.L二维码的误差校正级别(L, M, Q, H)。

入门:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>demo</title>
    <script src="js/jquery-3.3.1.js"></script>
    <script src="js/qrcode.min.js"></script>
</head>
<body>
<div id="qrCode"></div>


<script>
    // 参数一 div的id , 参数二 将xxxx生成二维码
    // let qrCode = new QRCode('qrCode','https://www.baidu.com');
    let qrCode = new QRCode('qrCode',{
        text:'http://www.baidu.com',
        width:200,
        height:200,
        // colorLight: '#e21918',
        // colorDark: '#0078d7',
        correctLevel: QRCode.CorrectLevel.M
    });
</script>

</body>
</html>

二.扫码支付详解:

(1)微信扫码支付申请

微信扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

申请步骤:

第一步:注册公众号(类型须为:服务号)

请根据营业执照类型选择以下主体注册:个体工商户| 企业/公司| 政府| 媒体| 其他类型。

第二步:认证公众号

公众号认证后才可申请微信支付,认证费:300元/次。

第三步:提交资料申请微信支付

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

第四步:开户成功,登录商户平台进行验证

资料审核通过后,请登录联系人邮箱查收商户号和密码,并登录商户平台填写财付通备付金打的小额资金数额,完成账户验证。

第五步:在线签署协议

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

(2)开发文档

在线微信支付开发文档:

https://pay.weixin.qq.com/wiki/doc/api/index.html

微信支付接口调用的整体思路

  • 1、商户生成订单

  • 2、商户调用微信下单接口,获取预交易的链接

  • 3、商户将链接生成二维码图片,展示给用户;

  • 4、支付结果通知:

    • 微信异步通知商户支付结果,商户告知微信支付接收情况

    • 商户如果没有收到通知,可以调用接口,查询支付状态

  • 5、如果支付成功,发货,修改订单状态

注意:

前部分我们已经生成订单:

下面我们需要做的就是:

  • 2、调用微信下单接口,生成链接。

  • 3、根据链接生成二维码图片

  • 4、支付成功后修改订单状态

 

(3)API

统一下单:

请求路径

POST , URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

请求参数:

字段名变量名必填类型示例值描述
公众账号IDappidString(32)wxd678efh56微信支付分配的公众账号ID
商户号mch_idString(32)1230000109微信支付分配的商户号
随机字符串nonce_strString(32)5K8264ILT随机字符串,长度要求在32位以内
签名signString(32)C380BEC2B通过签名算法计算得出的签名值
商品描述bodyString(128)华为手机商品简单描述
商户订单号out_trade_noString(32)20150806125商户系统内部订单号
标价金额total_feeInt88订单总金额,单位为分
终端IPspbill_create_ipString(16)123.12.12.123APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。
通知地址notify_urlString(256)http://www.weixin.qq.com/wxpay/pay.php异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
交易类型trade_typeString(16)JSAPIJSAPI 公众号支付;NATIVE 扫码支付

这些参数大致分成3类:

  • appid、mch_id、spbill_create_ip、notify_url、trade_type:是商家自己的信息或固定数据,可以提前配置,因此无需每次请求单独配置,而是统一设置好即可,

  • nonce_str、sign:是为了保证数据安全而添加的验证数据,根据算法去生成,每次请求自动生成即可。

  • body、out_trade_no、total_fee:订单相关信息,需要我们自己填写。

支付结果通知:

支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

微信服务会自动向notify_url地址发起POST请求:

通知参数:

字段名变量名必填类型示例值描述
返回状态码return_codeString(16)SUCCESSSUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断
返回信息return_msgString(128)OK当return_code为FAIL时返回信息为错误原因 ,例如签名失败参数格式校验错误

通信成功,会返回下面信息:

字段名变量名必填类型示例值描述
商户订单号out_trade_noString(32)1212321商户系统内部订单号,要求32个字符内
业务结果result_codeString(16)SUCCESSSUCCESS/FAIL

我们需要返回给微信的参数

字段名变量名必填类型示例值描述
返回状态码return_codeString(16)SUCCESS请按示例值填写
返回信息return_msgString(128)OK请按示例值填写
<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
</xml>

(4)SDK

虽然请求参数比较复杂,但官方已经提供了SDK,供我们使用;

但是微信没有提供maven仓库坐标,因此我们必须下载使用,建议使用资料中,我提供给大家的SDK,其中做了一些必要的设置:

自定义PayConfig实现,定义:公众号id、商户号、账户签名等

提供的SDK打包并安装到本地的maven仓库:

mvn source:jar install -Dmaven.test.skip=true

在项目中引入坐标:

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

为了简化引入API参数的封装,封装了工具类:

package com.wsl.util;

import com.github.wxpay.sdk.PayConfig;
import com.github.wxpay.sdk.WXPay;
import org.apache.commons.lang3.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 微信支付工具类
 */
public class PayUtils {

    private static WXPay wxPay;

    // 支付成功回调地址
    private static String notifyUrl = "http://a7w.atappfree.cc/travel/PayNotify";

    // 初始化微信支付
    static {
        try {
            PayConfig payConfig = new PayConfig();
            payConfig.setAppID("wx12345678900000"); // 公众账号ID
            payConfig.setMchID("13456789777");// 商户号
            payConfig.setKey("T6m933dftttgggrtrrereerrKwb");// 生成签名的密钥
            wxPay = new WXPay(payConfig);
        } catch (Exception e) {
            // e.printStackTrace();
            throw new RuntimeException(e.getMessage());
        }
    }

    // 生成微信订单支付 url
    public static String createOrder(String orderId, Integer totalPay) {
        Map<String, String> data = new HashMap<>();
        // 商品描述
        data.put("body", "旅游中心-商品支付");
        // 订单号
        data.put("out_trade_no", orderId);
        //金额,单位是分
        data.put("total_fee", totalPay.toString());
        //调用微信支付的终端IP
        data.put("spbill_create_ip", "127.0.0.1");
        //回调地址
        data.put("notify_url", notifyUrl);
        // 支付有效时间10分钟
        Date now = new Date();
        Date now_10 = new Date(now.getTime() + 600000); //10分钟后的时间
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");//可以方便地修改日期格式
        String nowTime_10 = dateFormat.format(now_10);
        data.put("time_expire", nowTime_10);
        // 交易类型为扫码支付
        data.put("trade_type", "NATIVE");

        // 利用wxPay工具,完成下单
        Map<String, String> result = null;
        try {
            result = wxPay.unifiedOrder(data);
        } catch (Exception e) {
            throw new RuntimeException("微信下单失败", e);
        }
        // 校验业务状态
        checkResultCode(result);

        // 下单成功,获取支付链接
        String url = result.get("code_url");
        if (StringUtils.isBlank(url)) {
            throw new RuntimeException("微信下单失败,支付链接为空");
        }
        return url;
    }

    // 检查业务状态
    public static void checkResultCode(Map<String, String> result) {
        String resultCode = result.get("result_code");
        if ("FAIL".equals(resultCode)) {
            throw new RuntimeException("【微信支付】微信支付业务失败");
        }
    }

}

 

三.支付结果通知实现:

(1)notify_url

统一下单请求参数中有一个非常重要的,叫做notify_url的:

基于上文的介绍我们知道,这个地址是在支付成功后的异步结果通知。官网介绍如下:

支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

所以,此处的地址必须是一个外网可访问地址,而且我们要定义好回调的处理接口。

http://localhost:8080/travel/pay/notify

注意:通知url必须为直接可访问的url,不能携带参数

(2)内网穿透:

此处我们肯定不能写:http://localhost:8080/travel/pay/notify,这个域名是本地,是不被外网识别的。如何才能获取一个能够外网访问的域名呢?

我们可以通过内网穿透来实现,那么什么是内网穿透呢?

简单来说内网穿透:让外网能访问你本地的应用,例如在外网打开你本地http://127.0.0.1的指向Web站点。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文链接: http://www.dtmao.cc/news_show_261492.html

附件下载

相关教程

  • Java=微信支付详解与日志记录详解

    一.二维码&#xff1a; &#xff08;1&#xff09;什么是二维码 二维码又称QR Code&#xff0c;QR全称Quick Response&#xff0c;是一个近几年来移动设备上超流行的一种编码方式&#xff0c;它比传统的Bar Code条形码能存更多的信息&#xff0c;也能表示更多的数据类型。 &…

    2020/12/26 22:10:15
  • 安卓集成微信支付可能存在的坑

    小生安卓开发已有三年时间了&#xff0c;其间集成各种第三方框架也有不少&#xff0c;其中感觉坑最多最容易犯错的就是微信支付的集成了。前不久已经是第三次集成微信支付&#xff0c;还是不小心掉进了坑里&#xff0c;一天时间才排查出问题。所以现在特地总结以前集成遇到的坑…

    2020/12/26 22:10:15
  • 关于微信学习之微信公众号支付开发

    关于微信支付初学者一定有很多的疑问&#xff0c;首先我们需要结合一下自己的程序操作微信支付所需要的业务流程。 1、如我这边需要开发一个公众号支付&#xff1a; 首先用户扫码访问后台&#xff08;或者通过公众号直接进入&#xff0c;点击一个支付请求按钮&#xff09;后台…

    2020/12/26 22:10:13
  • iOS仿微信支付弹出框

    2019独角兽企业重金招聘Python工程师标准>>> 选择指纹或密码弹出框 /YSTPaySelectView.h #import <UIKit/UIKit.h>interface YSTPaySelectView : UIView property (nonatomic, copy) NSString *title, *detail; property (nonatomic, assign) CGFloat money; …

    2020/12/26 22:10:12
  • Android_指纹支付_安全问题_前后端交互逻辑

    具体代码不详细介绍&#xff0c;可以自己去看这些资料&#xff0c;只详细介绍最终的客户端和服务器端交互逻辑。/********************************************1&#xff0c;参考****************************************/ // 重点参考资料 https://github.com/gaoyangcr7/Bi…

    2020/12/26 22:10:11
  • react-native-wechat 包使用微信支付的总结

    第一个重点&#xff1a;看官方文档&#xff0c;两个页介绍&#xff0c;很简单的&#xff0c;就是了解一下支付流程。 1、统一下单&#xff1a;https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter9_1 2、调起支付接口&#xff1a;https://pay.weixin.qq.com/wiki/d…

    2020/12/26 22:10:10
  • 微信公众号—公众号支付JSPAI统一下单接口,详细流程

    公司为一个系统提供了微信公众号服务&#xff0c;使用nutz框架自带的微信集成功能&#xff0c;其中可以做一些微信公众后台的一些功能 如何开发微信公众号支付功能&#xff1f; 第一步、先把需要用的东西都准备好 开发环境&#xff0c;已经认证的微信公众号&#xff0c;已经…

    2020/12/26 22:10:09
  • 你会用微信付款码支付吗?一定要打开这个设置,保障你资金安全

    如今使用移动支付的人越来越多&#xff0c;在商城购物的时候我们也基本见不到现金支付了&#xff0c;而移动支付又分为微信和支付宝两大平台&#xff0c;与专门从事移动支付行业的支付宝不同&#xff0c;微信支付是依靠微信这款聊天工具成长起来的。 虽然有庞大用户的支撑&…

    2020/12/26 22:10:08
  • 微信扫码支付

    摘抄课件,如有侵权,联系删除 二维码 1.二维码是什么 二维码又称QR Code&#xff0c;QR全称Quick Response&#xff0c;是一个近几年来移动设备上超流行的一种编码方式&#xff0c;它比传统的Bar Code条形码能存更多的信息&#xff0c;也能表示更多的数据类型。 二维条码/二维…

    2020/12/26 22:10:08
  • 微信支付 第三篇 微信调用H5页面进行支付

    上一篇讲到拿到了 预支付交易标识 wx251xxxxxxxxxxxxxxxxxxxxxxxxxxxxx078700 第四步&#xff0c;是时候微信内H5调起支付了&#xff01; 先准备网页端接口请求参数列表 微信文档中已经明确给出了所有参数名和参与签名计算的参数&#xff0c;即 appId&#xff0c;具有支付权限的…

    2020/12/26 22:10:07
  • 支付宝微信离线支付算法猜想

    猜想原理 以支付宝为例&#xff0c;只要之前有一次用这个支付宝钱包账号买过东西&#xff0c;自动售货机就可以记住&#xff0c;并进行识别&#xff08;猜测是用了一个标志码来唯一识别&#xff09;。 设计猜想一 用户在支付宝上绑定自己的银行帐号及个人信息&#xff1b; 用户…

    2020/12/26 22:10:05
  • 重学 Java 设计模式:实战桥接模式「多支付渠道(微信、支付宝)与多支付模式(刷脸、指纹)场景」

    作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn - 编写系列原创专题文章 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 一、前言 为什么你的代码那么多ifelse 同类的业务、同样的功能&#xff0c;怎么就你能写出来那么多if…

    2020/12/26 22:10:04
  • Android开发知识(十二):30分钟快速接入微信支付SDK

    文章目录一、申请应用二、配置微信支付的SDK三、微信支付流程1、统一下单接口2、APP调起支付接口3、微信支付的回调四、总结一、申请应用 1、首先到 [ 微信开放平台官网] 申请注册帐号&#xff0c;这些流程就忽略了到官网一看自然就知道怎么走&#xff0c;感觉在这里没有必要说…

    2020/12/26 22:10:03
  • Android 指纹登录、支付

    最近在做指纹登录&#xff0c;然后网上一大堆&#xff0c;but&#xff0c;几乎都只是说指纹识别&#xff0c;识别后如何登录几乎没有资料。 其他基础的就不说了&#xff0c;网上一大堆。。。 为什么Cipher需要包装传递给authenticate()方法? Cipher传递给指纹验证方法&#…

    2020/12/26 22:10:03
  • 品优购项目笔记(十四):微信支付

    品优购项目笔记&#xff08;十四&#xff09;订单订单三张表关系提交订单二维码介绍优势容错级别qrious二维码生成插件微信支付微信支付流程项目支付流程生成支付链接查询是否支付成功订单 订单三张表关系 提交订单 controller RestController RequestMapping("/order&…

    2020/12/26 22:10:02
  • 微信小程序 SOTER 生物认证DEMO,指纹识别

    今天项目尝试使用微信小程序指纹认证功能 以下为测试demo index.js Page({/*** 页面的初始数据*/data: {isfingerPrint : false, //可否使用指纹识别 默认falseisfacial: false, //可否使用人脸识别 默认false},/*** 生命周期函数--监听页面加载*/onLoad: fun…

    2020/12/26 22:10:01
  • 电商项目day18(微信支付)

    今日目标: 二维码的简介 二维码的入门demo 微信平台支付接口调用 检测支付状态 支付日志 一.二维码简介以及入门demo 1.简介: 二维码又称 QR Code&#xff0c;QR 全称 Quick Response&#xff0c;是一个近几年来移动设备上超流行的一种编码方式&#xff0c;它比传统的 …

    2020/12/26 22:10:00
  • 微信小程序支付流程

    微信小程序支付流程 闲话不多说&#xff0c;先来简单的梳理一下微信小程序的支付流程&#xff1a; 上面呢是一张支付流程图&#xff0c;我们跟句上面的图片来进行讲解&#xff1a; 首先用户下单&#xff0c;点击按钮就会去发起一个请求道后端服务器&#xff0c;下单前要进行登…

    2020/12/26 22:09:59
  • 关于android第三方微信分享,支付失败,的返回签名错误的问题。

    1、一般都是因为签名没有配置正确导致的。 第一种办法下载官方提供的签名工具获取签名。 第二种就是用androidstudio获取签名。 进入到签名所在的文件夹&#xff0c;执行如下命令 D:\android\xxxx\xxx keytool -list -v -keystore xxxxx.jks 输入密钥库口令: 密钥库类…

    2020/12/26 22:09:58
  • 品优购电商系统开发 第18章 微信扫码支付

    课程目标 目标1&#xff1a;掌握二维码生成插件qrious的使用 目标2&#xff1a;能够说出微信支付开发的整体思路 目标3&#xff1a;能够调用微信支付接口&#xff08;统一下单&#xff09;生成支付二维码 目标4&#xff1a;能够调用微信支付接口&#xff08;查询订单&#xff…

    2020/12/26 22:09:57
  • 微信支付的测试用例

    功能 扫二维码 1.第一次扫描付钱二维码时可以得到相机权限&#xff0c;进入付钱界面 2.第一次扫描付钱二维码时可以拒绝相机权限&#xff0c;退回聊天界面 3.扫一扫可以扫描收钱的二维码 4.扫描出来的信息与收钱人信息相符 5.输入框只能输入数字 6.一次能支付的最大钱数 7.一次…

    2020/12/26 22:09:56
  • 想知道微信怎么做指纹支付开发?看这里!

    欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 作者简介&#xff1a;Henryye&#xff0c;叶轩&#xff0c;来自腾讯微信事业群&#xff0c;主要负责腾讯开源项目TENCENTSOTER&#xff08;GitHub地址&#xff1a;https://github.com/Tencent/soter &#…

    2020/12/26 22:09:55
  • Mate7微信指纹支付来了 比Touch ID整合微信早一点

    之前我们聊过微信将推指纹支付 "指付通"会与Touch ID整合吗这个话题&#xff0c;现在有国内厂商率先支持微信指纹支付&#xff0c;体验一下美国用户使用Apple Pay搭配Touch ID来实现便捷支付的感受。大赞国内手机厂家的创新能力&#xff01;&#xff01; 首先你先得有…

    2020/12/26 22:09:55
  • ** 支付解决方案_微信扫码支付(附详细代码,流程图)*

    课程目标 掌握二维码生成插件qrious的使用 能够说出微信支付开发的整体思路 能够调用微信支付接口&#xff08;统一下单&#xff09;生成支付二维码 能够调用微信支付接口&#xff08;查询订单&#xff09;查询支付状态 实现支付日志的生成与订单状态的修改 一. 二维码 1.1 什…

    2020/12/26 22:09:54

共有条评论 网友评论

验证码: 看不清楚?