H5调起微信支付

1.下面我说的是h5在小程序内部调取微信支付。

微信支付的步骤:参考官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1

2.1   查看h5调起微信支付

所需参数:

这些参数是由 后台请求微信 统一下单 API 获取的

请求微信统一下单API:其中有个必填字段

通知地址notify_urlString(256)http://www.weixin.qq.com/wxpay/pay.php异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。

用来接收微信支付成功后 通知服务端的地址

用户标识openidString(128)oUpF8uMuAJO_M2pxb1Q9zNjWeS6otrade_type=JSAPI时(即JSAPI支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识。openid如何获取,可参考【获取openid】。企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换

如果H5获取不到用户的openId,那么我们需要通过code码获取去用户的openId返回给前端,用户调用统一下单接口时,再传回来。获取详情参考微信开发文档。

3.根据微信开发文档,访问统一下单接口,访问成功后,根据返回参数拼接 H5所需参数

需要注意:

"package":"prepay_id=u802345jgfjsdfgsdg888",

这个参数格式有点不一样,需要注意

对参数进行MD5加签加密,加密方式参考微信开发文档,这里我贴出我个人写拼装参数与加密方法

	SortedMap<String, String> resp = new TreeMap<String, String>();
		
			resp.put("appId", result.get("APPID"));
			resp.put("timeStamp",String.valueOf(Instant.now().getEpochSecond()));
			resp.put("nonceStr", result.get("NONCE_STR"));
			resp.put("package", "prepay_id="+result.get("PREPAY_ID"));
			resp.put("signType", "MD5");
			String paySign = PayCommonUtil.getSign(resp);
			resp.put("paySign", paySign);
		

4.加密工具类PayCommonUtil

package com.newland.common.utils;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import com.tencent.common.Configure;

/**
 * 微信支付成功回调工具类
  * 服务号相关信息
*/
public class PayCommonUtil {
	 /**
	  * 加签,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
     *
     * @return boolean
     */
 
    
    public static String getSign(SortedMap<String, String> packageParams) {
        StringBuffer sb = new StringBuffer();
        Set es = packageParams.entrySet();
        Iterator it = es.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String k = (String) entry.getKey();
            String v = (String) entry.getValue();
            if (!"sign".equals(k) && null != v && !"".equals(v)) {
                sb.append(k + "=" + v + "&");
            }
        }

        sb.append("key=" + Configure.getKey());

        //算出摘要
        String mysign = EncodeUtils.encodeMD5(sb.toString(),"UTF-8").toUpperCase();

        return mysign;
    }
    
}

5.当我们拼接好H5需要的参数返回给H5后。由H5调起微信支付,微信支付成功后,微信调用我们下单传入的参数notify_url的地址通知我们微信支付的结果。后面我会讲解微信支付回调。

6.微信支付回调地址:https://blog.csdn.net/qq_38669394/article/details/106667053

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值