700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信支付之微信内H5调起支付

微信支付之微信内H5调起支付

时间:2019-07-25 20:51:08

相关推荐

微信支付之微信内H5调起支付

微信支付主要就是

1.openId的获取

2.订单详情扩展字符串prepay_id的获取

3.签名paySign的生成

1.有订单号(tradeNo),openId以及金额(totalfee)

其中订单号生成方式(时间+6位随机数,自行解决)

String tradeNo = CommonUtil.getOrderNo();

openId获取方式另外讲解(自行百度,有2种方式)

金额由前端传入

2.生成预订单,主要为了获取到prepay_id(有人说获取到了相当于成功了一半,大实话)

jso = JSONObject.fromObject(wxPrePay(tradeNo, totalfee, openId));

private Map<String, Object> wxPrePay(String tradeNo, String price, String openId) throws Exception {

Map<String, Object> res = new HashMap<String, Object>();

//在微信后台生成预支付订单

Map<String, String> prePayPra = MyWXPayUtil.sendPrepay(tradeNo, price, openId);//sendPrepay写下面了

if (prePayPra.get("result_code").equals("SUCCESS")) {

//校验参数

if (WXPayCore.validateSign(prePayPra)) {

//校验成功

Map<String, String> param = new HashMap<String, String>();

String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);

String nonceStr = UUID.randomUUID().toString().replace("-", "").substring(0, 16);

String package_str = "prepay_id=" + prePayPra.get("prepay_id");//此处获取到prepay_id

String signType = "MD5";

String appId = MyWXPayConfig.APPID;

param.put("timeStamp", timeStamp);

param.put("nonceStr", nonceStr);

param.put("package", package_str);

param.put("signType", signType);

param.put("appId", appId);

String paySign = WXPayCore.createMd5Sign(param);// 生成支付签名

// 生成需要返回给前端的支付签名

res.put("timeStamp", timeStamp);

res.put("nonceStr", nonceStr);

res.put("package", package_str);

res.put("paySign", paySign);

res.put("signType", signType);

res.put("appId", appId);

//主要是上面的6个参数

res.put("isPrey", true);

res.put("msg", "成功");

} else {

res.put("isPrey", false);

res.put("msg", "支付参数被修改!");

}

} else {

res.put("success", false);

res.put("msg", "生成支付订单失败!系统异常!");

}

return res;

}

// 提交预支付

public static Map<String, String> sendPrepay(String orderId,String price,String openId ) throws Exception {

// 订单信息---预付单参数订单设置

Map<String, String> packageParamsMap = new HashMap<String, String>();

BigDecimal totalFee =new BigDecimal(price);// 单位元,只能带两位小数

//生成支付签名需要的参数

packageParamsMap.put("appid", MyWXPayConfig.APPID);// 开放平台appid

packageParamsMap.put("mch_id", MyWXPayConfig.mchid);// 商户号

packageParamsMap.put("device_info", "WEB");// 支付设备号或门店号,选填

packageParamsMap.put("body", MyWXPayConfig.order_name);// 订单描述,展示给用户

packageParamsMap.put("nonce_str",String.valueOf(System.currentTimeMillis() / 1000));// 随机串,建议使用时间戳

//发起预支付需要的参数

packageParamsMap.put("openid", openId);// 微信用户在商户的唯一标识

packageParamsMap.put("trade_type", MyWXPayConfig.trade_type);// 支付类型,

packageParamsMap.put("out_trade_no", orderId);// 商户订单号

packageParamsMap.put("total_fee", totalFee.multiply($100).intValue()+"");// 订单金额,单位为分

packageParamsMap.put("spbill_create_ip", InetAddress.getLocalHost().getHostAddress());// 发器支付的机器ip

packageParamsMap.put("notify_url", MyWXPayConfig.notify_url);// 支付结果异步通知

//其他选填参数、

/*packageParamsMap.put("sign_type", "MD5");

packageParamsMap.put("detail", "MD5");

packageParamsMap.put("attach", "XX");

packageParamsMap.put("fee_type", "CNY");//默认人民币

packageParamsMap.put("time_start", "");//交易起始时间 yyyyMMddHHmmss

packageParamsMap.put("time_expire", "");//交易结束时间 yyyyMMddHHmmss

packageParamsMap.put("goods_tag", "");//优惠标记

packageParamsMap.put("limit_pay", "no_credit");//限制用户不能使用信用卡支付

packageParamsMap.put("scene_info", "{\"store_info\" : {\"id\": \"89999\",\"name\": \"xxxx\",\"area_code\": \"xxxxxxx\",\"address\": \"xxxxxx\"}}");

*/

String xmlValue = genPackage(packageParamsMap);

//统一下单支付请求

Map<String, String> resVal = doSendPost(MyWXPayConfig.pay_url, xmlValue,MyWXPayConfig.charset);

logger.info("微信返回" + resVal);

return resVal;

}

//最后把信息返回给页面返回的就是data

function onBridgeReady(data) {

WeixinJSBridge.invoke('getBrandWCPayRequest', {

"appId":data.appId,

"timeStamp": data.timeStamp,

"nonceStr": data.nonceStr,

"package": data.package,

"signType": data.signType,

"paySign": data.paySign

},

function(res){

$("#paybtn").removeAttr('disabled');

if(res.err_msg == "get_brand_wcpay_request:ok") {//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。

location.href='<%=basePath%>wechat/myorder.jsp';

}else if(res.err_msg =="get_brand_wcpay_request:cancel"){

//alert("支付取消,请及时去订单列表中重新支付!");

mui.alert('支付取消,请及时去订单列表中重新支付!', '',function() {

location.href='<%=basePath%>wechat/myorder.jsp';

});

}else if(res.err_msg =="get_brand_wcpay_request:fail" ){

//alert("支付失败,联系管理员!");

mui.alert('支付失败,联系管理员!', '',function() {

});

return;

}

});

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。