手把手教你--JAVA微信支付(H5支付)

微信支付——微信H5支付实战教程(微信支付v3版本java) 微信支付——微信H5支付下单实战教程(微信支付v3版本java) 阅读详情
AI摘要

本文详细介绍了微信H5支付的实现过程,包括商户平台的配置、前后端开发流程及关键参数解析,帮助开发者快速上手。

概述

之前说过,有时间把微信支付的H5支付讲解下,一直拖了半年时间,最近的项目正好又温习了支付功能,趁着热乎,抓紧起来。

微信的H5支付,相对公众号支付,容易了跟多,很多相似的东西,也有不同之处,这里只介绍H5支付的关键点,其他内容请先去看我的微信支付(公众号支付)那篇文章。

(传送门:https://blog.youkuaiyun.com/javaYouCome/article/details/79473743)。

什么是H5支付?

官网定义:要求商户已有H5商城网站,并且已经过ICP备案。通过微信H5支付可以实现在非微信浏览器(如QQ浏览器、谷歌浏览器、Safari等)中使用微信支付的场景。ps:说白了就是在微信外的所有浏览器如UC浏览器来点击“微信支付”然后自动唤起微信客户端来支付。

如果要测试支付的话,可以找个内网穿透的软件如(花生壳或natapp)他们的域名都是ICP备注过的,然后从手机浏览器访问微信支付的页面。

开发步骤

一、准备工作

1.  预备好微信支付的“四大参数”--(默认已准备好)。

2.1  在“商户平台”-我的产品-中开通H5支付,大概半天左右的时间可以审核通过。

 2.2在-开发配置中填写H5支付域名,必须填写,要不然不能支付。

二、开发流程

1.前端部分:H5支付前端的东西很少,就是点击“微信支付”,后端接口只返回一个用来跳转的地址(下面还会提到),然后跳转到这个地址就OK了,所以难点是后台部分。

2.后端部分:后台还是调用微信的“统一下单”接口,不过H5的“统一下单”所需参数少了很多。咱们看看都有那些参数:

其中必须的参数有:

1.appid--“四大参数”之一

2.mch_id--“四大参数”之一

3.nonce_str--随机字符串--用工具类获取

4.body--商品描述

5.out_trade_no--商城的订单号保持唯一

6.total_fee--支付金额单位:分

7.spbill_create_ip--ip地址

8.notify_url--支付成功回调地址

9.trade_type--交易类型--只能用“MWEB”

10.scene_info--场景信息值是个json字符串,注意给值时转义“双引号”,例子:"{\"h5_info\":{\"type\":\"Wap\",\"wap_url\":" 可以填应该网站的URL地址 ",\"wap_name\": \"订单支付\"}}"

11.sing--签名加密

H5支付的“统一下单”参数就是这么简单,把上面的参数整理好POST发送微信统一下单接口,返回的是个XML的字符串,如果成功,返回的是类似如下(美化后的字符串-微信后台返回的是一行):

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
  <appid><![CDATA[wx472b07299797774c]]></appid>
  <mch_id><![CDATA[1509488571]]></mch_id>
  <nonce_str><![CDATA[saPUVwW5nyHhB8tr]]></nonce_str>
  <sign><![CDATA[D0ACD36B851EEBBA97F0577CC752CCB9]]></sign>
  <result_code><![CDATA[SUCCESS]]></result_code>
  <prepay_id><![CDATA[wx28141313363954c5e9d84aeb3180413256]]></prepay_id>
  <trade_type><![CDATA[MWEB]]></trade_type>
  <mweb_url><![CDATA[https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx28141313363954c5e9d84aeb3180413256&package=90763707]]></mweb_url>
</xml>

里面的 mweb_url就是上面提到的前端要的跳转页面了,如果你想在支付完后,跳到指定页面可以在值的后面拼接指定redirect_url即可(要urlencode)如下:。

前端只需 location.href = mweb_url就可以开心的唤起微信来支付了。

三、代码部分

1.前端代码

一般我们的代码需要处理公众号和H5支付的情况,js代码navigator.userAgent返回客户端信息如果里面有"MicroMessenger"表示是微信浏览器,可以用公众号支付,否则用H5支付,可以参考如下代码:

页面有“微信支付”按钮,点击执行pay()方法。

function pay() {
    if (navigator.userAgent.indexOf("MicroMessenger") != -1) {
        pay_weixin();//微信浏览器支付
    } else {
        pay_other();//其他浏览器H5支付
    }
}

function pay_other() {
    var url = WEB + "/pay/orders_other
    $.get(url,function(result) {
        location.href = result.mweb_url;
    });
}
function pay_weixin() {
	//公众号支付方法
}

2.后端代码  里面的工具类,可以参考公众号支付里面有。

/**
 * @Description H5调起微信支付微信浏览器外支付
 * @param request
 * @return Map
 */
 
@RequestMapping(value="orders_other", method = RequestMethod.GET)
@ResponseBody
public Map<String,String> orders_other(HttpServletRequest request) {
	try {
		//拼接下单地址参数
		Map<String, String> paraMap = new HashMap<String, String>();
		//获取请求ip地址
		String ip = getIP(request);
		
		paraMap.put("appid", appid);  
		paraMap.put("mch_id", mchId);  
		paraMap.put("nonce_str", WXPayUtil.generateNonceStr());  
		paraMap.put("body", "XX商城-订单结算");  
		paraMap.put("out_trade_no", "201810102938949");//商品的订单号每次要唯一
		paraMap.put("total_fee", "1");
		paraMap.put("spbill_create_ip", ip);  
		paraMap.put("notify_url", "www.xxxxxx.com/pay/callback"));// 此路径是微信服务器调用支付结果通知路径  
		paraMap.put("trade_type", "MWEB");
		paraMap.put("scene_info", "{\"h5_info\":{\"type\":\"Wap\",\"wap_url\":"随意地址可以是公司官网地址",\"wap_name\": \"订单支付\"}}");
		
		String sign = WXPayUtil.generateSignature(paraMap, paternerKey);
		paraMap.put("sign", sign);
		String xml = WXPayUtil.mapToXml(paraMap);//将所有参数(map)转xml格式
		
		// 统一下单 https://api.mch.weixin.qq.com/pay/unifiedorder
		String unifiedorder_url = https://api.mch.weixin.qq.com/pay/unifiedorder;

		String xmlStr = HttpRequest.sendPost(unifiedorder_url, xml);//发送post请求"统一下单接口"
		
		//以下内容是返回前端页面的json数据
		String mweb_url = "";//跳转链接
		if (xmlStr.indexOf("SUCCESS") != -1) {  
			Map<String, String> map = WXPayUtil.xmlToMap(xmlStr);
			mweb_url = (String) map.get("mweb_url");  
           
            //支付完返回浏览器跳转的地址,如跳到查看订单页面
			String redirect_url = "www.xxxxx.com/orders";
			String redirect_urlEncode =  URLEncoder.encode(redirect_url,"utf-8");//对上面地址urlencode
			mweb_url = mweb_url + "&redirect_url=" + redirect_urlEncode;//拼接返回地址
		}
		
		Map<String, String> payMap = new HashMap<String, String>();
		payMap.put("mweb_url", mweb_url);
		return  payMap;
	} catch (Exception e) {  
		_log.info("微信支付异常");
	}  
	return null;
	
}

返回给前端的结果如下所示:

H5支付就是这么多了,可能不会一次调通,耐心看错误提示,祝早日支付成功。(完)

微信支付 - 基于H5的微信支付开发步骤及代码详解 这次总结一下用户在微信内打开网页时,可以调用微信支 付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能。当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现 代码可供参考,有的朋友直接看文档就可以自己实现此支付接口的开发了。 阅读详情

相关推荐

微信H5页面实现微信小程序支付

微信H5页面打开微信小程序支付功能

小木木的开发日常 2万+

〔支付接入〕微信的 h5 支付和 jsapi 支付

学会微信支付,打开你的财富之门

国内某知名游戏公司小菜鸡工程师 9550

微信支付H5和JSAPI

s: 证书序列号,在 账户中心 ▶ API安全 ▶ 管理证书 中可以看见,如果有多个证书,找到自己正在使用的证书序列号。-f: 微信商户API私钥文件目录,也就是第二步申请商户证书里面生成的 apiclient_key.pem 路径。原著:https://www.cnblogs.com/tinygeeker/p/17620498.html。平台证书跟上面申请的商户证书不是同一个东西,在后期请求中,平台证书和商户证书都要带上。-k: apiv3 秘钥,上面自己设置的32位数的密钥。

weixin_45472548的博客 4584

微信支付V3版H5支付JAVA版

微信支付V3版系列课程详细讲解微信支付的JSAPI支付、H5支付、Native支付、申请退款、支付结果通知、退款结果通知、申请交易账单、申请资金账单、下载账单、关闭订单。提供java版、c#版、python3版、php版课程。按照课程体系,课程分为大全家桶、小全家桶、套餐1、套餐2、套餐3,以便于学员选择。购课请提前联系九宝老师

手把手安排 --- JavaH5微信支付(移动端浏览器H5拉起微信支付)

JavaEE项目接入H5微信支付WAPJava项目接入H5微信支付开发环境前期准备准备过程申请微信公众平台及微信支付准备内网穿透域名微信支付开发配置撸代码部分重要pom文件前端代码微信支付统一下单Controller支付成功后接收微信通知Controller成功案例总结 Java项目接入H5微信支付 公司项目需要接入微信支付,因为主要是在移动端的网页进行支付,所以选择微信支付的H5跳转支付,就是在...

浪味仙 4645

h5 微信支付,支付宝支付

微信支付: 微信支付文档 https://pay.weixin.qq.com/wiki/doc/api/index.html 首先需要明白 你需要那种支付类型,很多人在这里是懵的 就用了上面的两种 第一种H5支付: description: 意思就是你可在非微信浏览器里面可以打开微信的app 调用他的原生支付。 其实文档也写的很清楚。 example: 用户点击 按钮 跟后台定义好后台需要的参数,也就是 后台 去微信 那边下单需要的参数, 上面这句话是废话看不懂的话就不看了...

Alex__King的博客 1461

H5网站接入微信支付(H5支付+JSAPI支付)

最近开发H5项目,需要接入微信支付,这里记录一下。 场景 项目是 H5 项目,这里踩坑了,以为接入 H5 支付就可以了,后面发现 H5 支付只能在微信外调用,所以后面连忙加入 JSAPI 支付 H5支付 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端...

砷碲 - Shendi 1万+

h5 支付宝支付/微信支付

h5微信/支付宝支付

u014105739的博客 845

微信支付APIV3统一支付接口(H5、JSAPI、H5、App、小程序)

微信支付APIV3统一支付接口(H5、JSAPI、H5、App、小程序)

一恍过去 4万+

移动App中接入微信支付和支付宝支付

小摊小贩们在线下交易一般无需接入微信支付,只需要向别人出示自己的付款码就行。因为一手交钱,一手交货,你不付钱,人家不会给你商品。但在网上,要实现无人值守,别人扫码付了款,平台得自动知道,然后再发货。所以必须接入微信支付。申请地址:https://mp.weixin.qq.com。关联一个appId,搜索appId, 然后提交申请。首先你要有一个微信账号,然后申请服务号或公众号。微信支付必须是企业主体,要有营业执照才能申请。在公众号侧,菜单”微信支付“里确认申请。本文简单整理了一下该过程,备忘。

曲折旅程,艰难人生 1万+

APP内嵌网页使用微信或支付宝的H5支付

如何绕过微信或支付宝的H5支付的拦截验证?下面我们从本质上来说明该如何解决这个问题。 微信和支付宝的H5支付下单成功后都会返回一个跳转支付的url连接,通过这个连接可以拉起微信或支付宝进行支付操作。 如果直接访问,支付宝会有一个中间的页面,而微信有个麻烦的refresh验证问题;那么是否可以跳过这个步骤直接将微信支付宝拉起进行支付呢? 网上大部分的教程都是让做安卓和IOS的自己去拦截微信和支付宝的地址进行处理。但是对这种内嵌网页,特别是那种直接通过前端HTML代码生成多端的情况,前端的同学就非常不好操作了;

起岸星辰 5277

H5调起微信支付

1.下面我说的是h5在小程序内部调取微信支付。 微信支付的步骤:参考官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 2.1 查看h5调起微信支付 所需参数: 这些参数是由 后台请求微信 统一下单 API 获取的 请求微信统一下单API:其中有个必填字段 通知地址 notify_url 是 String(256) http://www.weixin.qq.com/wxpay/..

qq_38669394的博客 3014

java集成微信支付(完整流程)

java集成微信支付(完整流程) 1.申请微信支付能力 * 要想使用微信支付能力,不管是app支付、公众号支付、h5支付等支付方式都需要先在微信商户平台申请开通支付能力。 * 申请开通支付能力的资料有公司营业执照、负责人身份证正反面等图片,相关所需的所有资料在微信官方商户平台上有说明。 * 申请完开通支付能力后,我们会得到商户号以及appId,然后设置32位官方密钥。 2.准备工作 *...

rg201612的博客 2万+

JAVA接入H5微信支付-V3

开通H5微信支付-V3,用于移动端H5网页调起微信支付进行付款功能。 微信支付需准备商户号、微信社交载体(公众号/小程序/开放平台)、网站备案域名

一个双鱼座的程序猿 2533

uniapp H5 - 实现微信支付生成二维码+实时监听用户扫码完成付款支付,移动端h5网页给用户展示付款二维码及扫码微信支付流程及示例源码,实现点击微信支付弹框显示微信支付二维码(Java、PHP)

uniapp H5如何支持微信扫码支付,uniapp前端实现微信支付,uniapp生成微信支付二维码,微信公众号h5使用微信支付,UniApp H5联调 微信支付(带详细注释)uniapp开发H5拉起微信支付全流程,uni-app h5调用微信支付方法,UniApp H5 微信支付详细示例demo源码,h5调用微信支付 uniapp开发H5-调用微信支付,uni-app Vue3 实现将微信支付的url转成二维码扫码支付,uniapp的H5端微信支付,SpringBoot实现微信扫码支付功能,ThinkPH

🏆 前端领域优质创作者 4603

uniapp 使用摄像头 live-pusher (APP)

uniapp 中开发 app 时使用live-pusher踩过的坑

随身笔记 1万+

Java 微信支付统一下单、支付回调、订单查询实现

首先,本文参考文档: a. 【微信支付】H5支付开发文档 b. Java 后端微信支付demo 引入jar包 <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> ...

- 4107

NX/UG二次开发—CAM—设置程序修剪边界Boundary

最近做了一个设置CAM程序边界的小工具,分享一下经验(官方的代码在文章末尾处),以下均以修剪边界曲线为例。 以下为官方提供的源码: /***************************** Include Files **********************************/ #include <stdlib.h> #include <uf.h> #include <uf_obj.h> #include <uf_object_type

门前大桥下,游过一群鸭,快来看一看,原来是C++ 3740

uni-app中微信支付之H5支付的实现【下】

相信大家已在网上找了各种资料,也看过了各种文档,对于整个流程我就不再重复啦,有疑惑的小伙伴可以移步微信开放平台查看详情,网页地址:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1 废话不多说,直接上代码: uni-app前端代码: <template> <view> <page-head :title="title"></page-head> <view class="

飞上云端看彩虹 6950

DeepSeek与豆包无缝对接:5分钟搞定智能周报自动化(附完整代码)

本文详细介绍了如何利用DeepSeek与豆包API,快速搭建一个智能周报自动化系统。通过整合豆包平台的工作流数据,并调用DeepSeek大模型进行深度分析与内容生成,该系统能在5分钟内自动抓取、分析多源信息,并生成结构清晰、富有洞察力的团队周报,显著提升工作效率。

weixin_29029995的博客 494

Android存储空间不足下,APP出现奔溃等情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 1. 问题起因     实时录制视频,使用getExternalCacheDir()函数返回的路径作为文件缓存区 2. 问题产生     系统在空间不足的情况下第一清除getExternalCacheDir和getCache文件下的缓存,导致正在录制的视频出现Error。 3. 解决方案     第一

OverseasAndroid的博客 4160
上一篇: 手把手教你--百度富文本编辑器Ueditor的使用和上传图片/文件到项目外(ueditor自定义上传路径)
下一篇: solr修改schema文件(solr修改配置文件)
小流至江河
博客等级 码龄9年 223粉丝 53原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值