java超详细小程序对接微信支付(一),看完不会你打我

2023-11-04

1.微信支付接入前准备(这些其实和我们开发,没什么关系,直接找公司拿即可)

商户已有微信小程序,用户通过好友分享或扫描二维码在微信内打开小程序时,可以调用微信支付完成下单购买的流程。

注意:小程序不能通过拉起H5页面做jsapi支付,小程序内只能使用小程序支付

A--申请APPID

由于微信支付的产品体系全部搭载于微信的社交体系之上,所以直连商户或服务商接入微信支付之前,都需要有一个微信社交载体,该载体对应的ID即为APPID。

如申请社交载体为小程序,请前往 小程序平台 申请

如商户已拥有自己的APP,且希望该APP接入微信支付,请前往 开放平台申请

 

B--申请mchid

申请mchid和APPID的操作互不影响,可以并行操作,申请地址如下: 商户号申请平台

申请成功后,会向服务商填写的联系邮箱下发通知邮件,内容包含申请成功的mchid及其登录账号密码,请妥善保存。

注意:一个mchid只能对应一个结算币种,若需要使用多个币种收款,需要申请对应数量的mchid。

 

C--配置API key

API v3密钥主要用于平台证书解密、回调信息解密,具体使用方式可参见接口规则文档中证书和回调报文解密章节。

请根据以下步骤配置API key:

1登录微信商户平台,进入【账户中心 > API安全 】目录,设置APIV3密钥。

2在弹出窗口中点击“已沟通”。

3.输入API密钥,内容为32位字符,包括数字及大小写字母。点击获取短信验证码

4.输入短信验证码,点击“确认”即设置成功。

当你大致的准备完之后你很得到这样的文件夹数据

 以下是官方文档接入前准备

https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml


2.JSAPI下单

商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再按Native、JSAPI、APP等不同场景生成交易串调起支付。

先进行后端发送http请求获取到 prepay_id

HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi");
httpPost.addHeader("Accept", "application/json");
httpPost.addHeader("Content-type","application/json; charset=utf-8");

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectMapper objectMapper = new ObjectMapper();

ObjectNode rootNode = objectMapper.createObjectNode();
rootNode.put("mchid","1900009191")
        .put("appid", "wxd678efh567hg6787")
        .put("description", "Image形象店-深圳腾大-QQ公仔")
        .put("notify_url", "https://www.weixin.qq.com/wxpay/pay.php")
        .put("out_trade_no", "1217752501201407033233368018");
rootNode.putObject("amount")
        .put("total", 1);
rootNode.putObject("payer")
        .put("openid", "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o");

objectMapper.writeValue(bos, rootNode);

httpPost.setEntity(new StringEntity(bos.toString("UTF-8"), "UTF-8"));
CloseableHttpResponse response = httpClient.execute(httpPost);

String bodyAsString = EntityUtils.toString(response.getEntity());
System.out.println(bodyAsString);

JSAPI下单

 3.小程序调起支付

A-后端从获取到的prepay_id就是package

 B-你需要把以下的数据封装在一起返回给前端

 C-但这里的paysign需要继续签名返回

这个paysign其实就是把 appid + timeStamp + nonceStr + package 在使用你的秘钥进行加密

 注意:这里因为是小程序的支付,前三个数据是直接进行填值,最后一个是prepay_id=数据值

而你的秘钥是以下的

打开这个文件

 

 

-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----之间既是你的私钥

注意:私钥自己保管好,不能外漏

在这里message为你拼接好的原数据,使用sign进行加密,得到需要的paySign

String sign(byte【】 message) {
    Signature sign = Signature.getInstance("SHA256withRSA");
    sign.initSign(yourPrivateKey);
    sign.update(message);
    return Base64.getEncoder().encodeToString(sign.sign());
}

注意:这里要先进行把message给转为getbyte数组进行加密

将这些数据进行封装传给前端进行调起支付

请求示例

wx.requestPayment
(
	{
		"timeStamp": "1414561699",
		"nonceStr": "5K8264ILTKCH16CQ2502SI8ZNMTM67VS",
		"package": "prepay_id=wx201410272009395522657a690389285100",
		"signType": "RSA",
		"paySign": "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==",
		"success":function(res){},
		"fail":function(res){},
		"complete":function(res){}
	}
)
 

官方文档-小程序调起支付

https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_4.shtml

4.支付通知回调

微信支付通过支付通知接口将用户支付成功消息通知给商户

该链接是通过基础下单接口中的请求参数“notify_url”来设置的,要求必须为https地址。请确保回调URL是外部可正常访问的,且不能携带后缀参数,否则可能导致商户无法接收到微信的回调通知信息。回调URL示例:“https://pay.weixin.qq.com/wxpay/pay.action”

回调通知

A-进行回调的数据

回调的数据因为是微信那边给你的,所以我们可以使用IO六获取到调用着携带的数据

BufferedReader reader = request.getReader();
        //在准备一个空的字符串
        String str =null;
        //在准备一个builder
        StringBuilder stringBuilder = new StringBuilder();
        //这里就是进行判断,如果获取到的东西有值,就把东西给放到这个BUILER里面去
        while ((str = reader.readLine()) !=null ){
            stringBuilder.append(str);
        }
在进行转换在json对象

这里转为json对象,可使用FastJson转换,建议可以把回调的数据给后端提前给封装为一个对象进行接收

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>

支付成功结果通知实例


{
    "id": "EV-2018022511223320873",
    "create_time": "2015-05-20T13:29:35+08:00",
    "resource_type": "encrypt-resource",
    "event_type": "TRANSACTION.SUCCESS",
    "summary": "支付成功",
    "resource": {
        "original_type": "transaction",
        "algorithm": "AEAD_AES_256_GCM",
        "ciphertext": "",
        "associated_data": "",
        "nonce": ""
    }
}

欢迎提出意见,一名热爱学习和分享的攻城狮

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java超详细小程序对接微信支付(一),看完不会你打我 的相关文章

  • 【Java】list对象(类)按某个属性排序

    这里采用的方法是 将要排序的类实现Comparable接口 具体如下 假设有个rule类 要按照sort字段排序 首先该类要实现Comparable接口 并实现它的compareTo 方法 Author EvanChen Date 2018
  • java连接kafka测试

    进入到kafka文件夹中修改配置文件 vim config server properties 启动zookeeper bin zookeeper server start sh config zookeeper properties 端口
  • python mssql数据库开发_Python实现的连接mssql数据库操作示例

    本文实例讲述了Python实现的连接mssql数据库操作 分享给大家供大家参考 具体如下 1 目标数据sql2008 R2 ComPrject gt TestModel 2 安装python 连接mssql 模块 运行 pip instal
  • 小程序hover-class点击态效果——小程序体验

    微信小程序设置 hover class 实现点击态效果 增强小程序触感 提高用户交互感知度 概念及注意事项 微信小程序中 可以用 hover class 属性来指定元素的点击态效果 但是在在使用中要注意 大部分组件是不支持该属性的 目前支持

随机推荐

  • Spring Cache

    Spring Cache Spring Cache使用方法与Spring对事务管理的配置相似 Spring Cache的核心就是对某个方法进行缓存 其实质就是缓存该方法的返回结果 并把方法参数和结果用键值对的方式存放到缓存中 当再次调用该方
  • Cisco Voip实验

    http hackerjx blog 51cto com 383839 248031 转载于 https blog 51cto com markyan 1043695
  • Java基础-I/O流(文件字节流)

    字符串常见的字符底层组成是什么样的 英文和数字等在任何国家的字符集中都占1个字节 GBK字符中一个中文字符占2个字节 UTF 8编码中一个中文字符占3个字节 注意 编码前的字符集和编码好的字符集要必须一致 否则会出现中文字符乱码 英文和数字
  • NullPointerException : HiveAuthorizerImpl.checkPrivileges(HiveAuthorizerImpl.java:85)

    背景 做hive sentry LDAP授权 1 jdbc hive2 localhost 10000 gt connect jdbc hive2 localhost 10000 Connecting to jdbc hive2 local
  • Gitlab中Pipeline语法三

    Pipeline语法三 only except rules workflow only和except 用分支策略来限制jobs构建 only 定义哪些分支和标签的git项目将会被job执行 except定义哪些分支和标签的git项目将不会被
  • 腾讯云对象存储的创建和S3 Browser的使用

    简述 想想第一次接触对象存储的时候还是很兴奋的 同时也是一脸懵逼 然后开始网上疯狂的找资料 但因为客户当时给的文档写的是关于Amazon S3之类的 所以自以为的就只有Amazon S3这一家 接着开始查资料 经过一番努力最后在Amazon
  • ubuntu下下载安装dstat

    如果直接安装采用s sudo apt install dstat 或者通过下载方式 https launchpad net ubuntu source dstat 0 7 4 6 1 下载这三个包 然后里面直接运行 dstat就可以了 前提
  • I3Net: Implicit Instance-Invariant Network for Adapting One-Stage Object Detectors

    摘要 最近的两阶段跨域检测工作广泛探索了局部特征模式 以获得更准确的适配结果 这些方法在很大程度上依赖于区域建议机制和基于ROI的实例级特性来设计关于前景目标的细粒度特性对齐模块 然而 对于一阶段检测检测器 在检测流程中很难甚至不可能获得显
  • 【Scapy】使用Python的Scapy包对Wirshark捕获的Http数据包进行解析(格式输出)

    通过Anaconda安装scapy pip install scapy http Python源码如下 实现功能 1 读取本地pcap文件 文件内容为Wirshark捕获的数据二进制流 2 通过scapy将二进制数据流解析为有结构的pake
  • 贪心算法解决集合覆盖问题

    问题描述 假设存在下面需要付费的广播台 以及广播台需要覆盖的地区 如何选择最少的广播台 让所有的地区都可以接受到信号 广播台 覆盖地区 k1 北京 上海 天津 k2 广州 北京 深圳 k3 成都 上海 杭州 k4 上海 天津 k5 杭州 大
  • python折线图设置标题

    在 Python 中使用 Matplotlib 绘制折线图时 可以使用 title 函数来设置图表的标题 例如 import matplotlib pyplot as plt 绘制折线图 plt plot x y 设置标题 plt titl
  • Android系统目录树建立过程

    一 文件系统类型 了解Android系统目录树的建立之前 有必要了解文件系统类型 Linux内核中将文件系统类型抽象为结构体struct file system type 其中name为文件系统名称 例如ext4 f2fs rootfs等
  • 学习笔记-接口测试(postman、jmeter)

    一 什么是接口测试 通常做的接口测试指的是系统对外的接口 比如你需要从别的系统来获取到或者同步资源与信息 他们会提供给你一个写好的接口方法供你调用 比如常用的app 用户同步这些在处理数据的时候需要通过接口进行调用 webService接口
  • 让HR眼前一亮:30个APP项目软件测试经验,点燃你的简历

    在求职过程中 我们都希望自己的简历能够吸引面试官的眼球 从而获得更多的面试机会 作为一名软件测试人员 丰富的实战经验是让自己脱颖而出的关键之一 在我多年从事APP项目软件测试的工作中 我积累了大量的实践经验 并成功将这些经验写入简历中 让自
  • 剑指 Offer 05. 替换空格

    题目链接 05 替换空格 思路分析 遍历判断即可 class Solution public string replaceSpace string s std ios sync with stdio false string tmp for
  • 谈谈ChatGPT对中国教育的影响与挑战,我们该怎么办?

    ChatGPT对中国教育的影响 1 个性化教学 通过分析学生的学习习惯和问题 AI可以为每个学生提供个性化的学习路径 例如 如果一个学生在数学上表现出困难 AI可以提供更多的数学练习和教学资源 2 在线教育 AI可以作为在线课程的一部分提供
  • 基于docker搭建ngrok私服

    经常开发微信的同学们 肯定会经常用到内网穿透 大部分人选择网上寻找各种现成的 比如ngrok官网 natapp sunny ngrok或者花生壳之类的 但是世界上没有免费的午餐 要不就是收费 要不就是免费但是偶尔会出现连接失败的问题 当然大
  • 第四届蓝桥杯国赛C++B组 格子刷油漆

    标题 格子刷油漆 X国的一段古城墙的顶端可以看成 2 N个格子组成的矩形 如图1所示 现需要把这些格子刷上保护漆 你可以从任意一个格子刷起 刷完一格 可以移动到和它相邻的格子 对角相邻也算数 但不能移动到较远的格子 因为油漆未干不能踩 比如
  • 模拟电路设计(3)--- 三极管之复合组态

    整理了一些电子工程类的资料 分享给大家 目前有模拟电路 单片机 PCB设计 FPGA EMC 物联网 Linux相关学习资料 还有针对大学生的资料包 后续还会有更多资料分享给大家 助力大家学习 成就梦想 博主福利 免费获取电子工程类学习资料
  • java超详细小程序对接微信支付(一),看完不会你打我

    1 微信支付接入前准备 这些其实和我们开发 没什么关系 直接找公司拿即可 商户已有微信小程序 用户通过好友分享或扫描二维码在微信内打开小程序时 可以调用微信支付完成下单购买的流程 注意 小程序不能通过拉起H5页面做jsapi支付 小程序内只