微信H5支付:
1,微信外部H5支付:
名词解释:就是在自己的H5网站页面里调用微信支付功能,注意,这里只能是在微信外部支付,在微信内打开网站是无法支付的,
要另外使用微信公众号支付
调用微信H5支付接口前提条件:
1,注册公众号并且通过认证
2,在公众号里申请微信支付,成为商户号
3,在商户平台里申请H5支付
4,在商户平台里的开发设置里设置好H5支付域名
以上4个条件都满足时,便可以调用微信H5支付接口
https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1
上面网址是微信支付API文档,先了解调用接口需要传递的参数,仅看必填项:
appid:微信分配的公众账号ID(企业号corpid即为此appId)
mch_id:微信支付分配的商户号
nonce_str:随机字符串,不长于32位
sign:签名
body:商品简单描述,该字段须严格按照规范传递
out_trade_no:商户系统内部的订单号,32个字符内、可包含字母
total_fee:订单总金额,单位为分
spbill_create_ip:必须传正确的用户端IP
notify_url:接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
trade_type:H5支付的交易类型为MWEB
scene_info:场景信息,API文档上标注是必填项,但是我没用到,也成功了
以上就是我们要调用微信H5支付接口需要的参数,然后按照以下步骤处理参数:
先调用统一下单接口,获取微信跳转的支付页面URL地址
1,先生成一个随机的32位字符串
String nonceStr = UUID.randomUUID().toString().trim().replaceAll("-", "").toUpperCase();
2,生成签名sign
把参数封装成一个map,传递到以下方法中,得到一个排序后的字符串stringA:
Map<String, String> map = new HashMap<String, String>();
map.put("nonce_str", nonceStr);
map.put("appid", appId);
map.put("mch_id", mchId);
map.put("body", body);
map.put("out_trade_no", outTradeNo);
map.put("total_fee", totalFee);
map.put("spbill_create_ip", "113.87.162.45");
map.put("notify_url", notifyUrl);
map.put("trade_type", tradeType);
map.put("key", key);
注意:这个key是商户平台里面设置的一个秘钥key,要拼接到参数中
String stringA = UnicodeUtils.formatUrlMap(map, false, true);
/**
*
* 方法用途: 对所有传入参数按照字段名的Unicode码从小到大排序(字典序),并且生成url参数串<br>
* 实现步骤: <br>
*
* @param paraMap 要排序的Map对象
* @param urlEncode 是否需要URLENCODE
* @param keyToLower 是否需要将Key转换为全小写
* true:key转化成小写,false:不转化
* @return
*/
public static String formatUrlMap(Map<String, String> p