微信支付~微信手机网站支付(mweb)

这次做微信h5支付(Mweb)时发现很多时间都花费在需申请和配置的操作上,所以整体记录下这次h5支付(Mweb)的流程作为备忘录。

1.申请h5支付的权限

申请入口:登录微信商户平台-->产品中心-->我的产品-->支付产品-->H5支付点击申请开通(这里面会让你上传一些应用截图、以及域名(备案好的)等信息,需要提前准备好)。申请完后等待审核通过即可

2.配置微信h5支付域名

方式:登录微信商户平台-->产品中心-->开发配置-->h5支付域名

(如果不配置,则会报商家存在未配置的参数,请联系商家解决的错误)

3.进行后台接口开发

支付接口主要就是微信开发文档上的统一下单接口https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1

接口需要的参数和参数说明请参考上面的链接。我采用的是第三方封装好的方式去支付的,下来我贴出h5支付的代码:

1.pom文件引入

<!-- 微信支付-->
<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>0.0.3</version>
</dependency>

2.采用这个第三方我们必须设置一个配置类,并且这个配置类必须实现WXPayConfig接口,参考以下代码:

import java.io.InputStream;

import org.springframework.stereotype.Component;

import com.github.wxpay.sdk.WXPayConfig;

@Component
public class WeChatConfig implements WXPayConfig{
    public static String APPID = "xxx"; //appID  
    public static String APPKEY = "xxx"; //商户秘钥
    public static String MCHID = "xxx";//商户号
    public static String NOTIFY_URL = "xxx";//异步通知链接
    public static final String  WECHATURL = "https://api.mch.weixin.qq.com/pay/unifiedorder";

    @Override
    public String getAppID() {
        return APPID;
    }

    @Override
    public String getMchID() {
        return MCHID;
    }

    @Override
    public String getKey() {
        return APPKEY;
    }

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

    @Override
    public int getHttpConnectTimeoutMs() {
        return 0;
    }

    @Override
    public int getHttpReadTimeoutMs() {
        return 0;
    }
}

这里面需要注意的是APPID、APPKEY(商户秘钥)、MCHID(商户号)从哪里去寻找!

查看APPID:

方式1:登录微信商户平台-->营销中心-->支付后配置   中可以看到

方式2:可在微信公众平台中看到

查看APPKEY(商户秘钥)

方式1:登录微信商户平台-->账户中心-->API安全   中可以设置/看到

查看MCHID(商户号)

方式1:登录微信商户平台-->账户中心-->商户信息   中可以设置/看到

3.复制以下java代码,传入参数即可!

/**
    * 移动网站支付:统一下单接口的请求
    * @param jsonMap
    * @return Map<String,Object>
*/
public static Map<String,String> mWebPay(String body,String out_trade_no,String total_fee,String attach,String spbill_create_ip,String notify_url){
	WXPay wxpay = new WXPay(new WeChatConfig());
	Map<String, String> data = new HashMap<String, String>();
	data.put("body",body);//商品描述
        data.put("out_trade_no", out_trade_no);//订单编号
        data.put("attach",attach);//自定义内容
        data.put("total_fee", total_fee);//总价
        data.put("spbill_create_ip", spbill_create_ip);
        data.put("notify_url", notify_url);
        data.put("trade_type", "MWEB");//此为h5支付
        try {
        	data =  wxpay.unifiedOrder(data);//这一步需要对返回结果进行判断,我这没进行判断
        	if("FAIL".equals(data.get("result_code"))) {
        		data.put("status", "500");
        		data.put("msg", data.get("err_code_des"));
        	}else {
        		data.put("status", "200");
        	}
		} catch (Exception e) {
			data.put("status", "500");
			e.printStackTrace();
		}
        return data;
	}

该方法中最主要的类为WXPay(com.github.wxpay.sdk.WXPay),该类中有很多封装好的与微信支付相关的方法,比如退单、查询订单等,届时可以点进去看看就明白了。

按照要求传入参数,正常返回的map中会有prepay_id、mweb_url两个参数,其中mweb_url返回到前段,前段通过

window.location.href = res.mwebUrl;进行跳转即可。(注意:一定要用window.location.href进行跳转,不能直接访问mwebUrl,否则会报 ” 商家参数格式有误,请联系商家解决 “)微信处理完后会异步返回消息到notify_url这个地址,在这里面我们根据微信的返回结果对自己的业务逻辑进行处理。

如何测试h5支付和支付回调?

因为微信h5支付需要在微信商户平台上配置已经备案过的域名,在产品中心-->开发配置-->h5支付域名中配置的域名(可配3个)均可以正常调用微信支付,所以找一个备案好的域名,将其在商户平台配置好。将域名解析到测试的服务上,调用支付接口便可以进行测试。若域名只有一个且正式服务器硬件设施可以,可以在正式服务器上重启一个tomcat(端口不一样即可)作为测试的服务。

要在Java中实现H5微信支付,可以使用微信官方提供的支付API,具体步骤如下: 1. 注册微信支付服务号,并开通支付功能。 2. 在Java中调用微信支付API,生成预支付订单,获取预支付订单号。 3. 根据预支付订单号生成支付链接,返回给前端。 4. 前端通过支付链接跳转至微信支付页面进行支付。 以下是Java代码示例: 1. 生成预支付订单: ```java public String createPrepayOrder(String body, String outTradeNo, int totalFee, String spbillCreateIp, String notifyUrl) throws Exception { // 构造请求参数 SortedMap<String, String> params = new TreeMap<>(); params.put("appid", "微信公众号appid"); params.put("mch_id", "商户号"); params.put("nonce_str", WXPayUtil.generateNonceStr()); params.put("body", body); params.put("out_trade_no", outTradeNo); params.put("total_fee", totalFee + ""); params.put("spbill_create_ip", spbillCreateIp); params.put("notify_url", notifyUrl); params.put("trade_type", "MWEB"); String sign = WXPayUtil.generateSignature(params, "商户密钥"); params.put("sign", sign); String xml = WXPayUtil.mapToXml(params); String url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; String result = HttpUtil.postXml(url, xml); Map<String, String> resultMap = WXPayUtil.xmlToMap(result); return resultMap.get("prepay_id"); } ``` 2. 生成支付链接: ```java public String createPayUrl(String prepayId) throws Exception { SortedMap<String, String> params = new TreeMap<>(); params.put("prepay_id", prepayId); params.put("mweb_url", "微信支付回调地址"); params.put("nonce_str", WXPayUtil.generateNonceStr()); params.put("timestamp", System.currentTimeMillis() / 1000 + ""); params.put("sign_type", "MD5"); String sign = WXPayUtil.generateSignature(params, "商户密钥"); params.put("sign", sign); String url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; String param = WXPayUtil.mapToXml(params); String result = HttpUtil.postXml(url, param); Map<String, String> resultMap = WXPayUtil.xmlToMap(result); return resultMap.get("mweb_url"); } ``` 以上是Java实现H5微信支付的基本步骤,需要注意的是,生成预支付订单和生成支付链接时,需要按照微信官方文档提供的参数规则进行构造,才能正确生成订单和支付链接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值