微信支付之微信内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;
}
});
}
微信支付之微信内H5调起支付相关推荐
- java微信内h5调起支付_java微信支付--------公众号内H5调起支付
/*** 统一下单接口,获取prepay_id *@paramrequest *@return */@RequestMapping(value= "/unifiedOrder", ...
- java微信公众号支付开发平台_Java微信公众平台开发之公众号支付(微信内H5调起支付)...
官方文档 准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败) 借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公众号 ...
- Java微信支付开发之公众号支付(微信内H5调起支付)
官方文档 准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败) 借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公众号 ...
- 微信h5 签名错误 php,【微信jsApi 支付】微信内H5调起支付时,提示“验证签名失败”...
1) 使用微信的在线签名工具检查签名是否和程序生成的一致 选择MD5,XML,然后把请求参数xml放进去,就能校验签名. 2)如果和微信的在线签名工具一致,说明程序没有错误,确定是API密钥错误(被别 ...
- java微信内h5调起支付_java进行微信h5支付开发
最近在做微信支付开发用的框架是 srpingMVC mybatis spring 下面是开发流程图 我们只需要开发红色标记的模块就可以了. 具体参数详情可以查看微信开发者文档. 新手第一次写,写的不好 ...
- h5微信本地调试 vue_Vue 移动端微信内H5调起支付(利用js sdk)
前端的写法 1.封装wxPay.js import wx from 'weixin-js-sdk' //先下载后引入 export function wexinPay(data) { return n ...
- 企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET
企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET 原文:企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET 先看效果 1.本文演示的是 ...
- 微信网页和app内h5页获取当前定位保持一致
Q:微信网页调用jssdk内的getLocation方法和客户端内封装的高德获取定位获取到的当前定位不一致,计算出的远近排序不一致. A:getLocation方法,type用gcj02.isHigh ...
- Vue 微信开发,微信内H5调起微信支付
注意:打包后的Vue URL 需要在微信公众平台设置好JS安全域名 <template><div class="icontent"><h3 style ...
最新文章
- AngularJS ng-if使用
- JavaScript基础:(加号,数值转换,布尔转换)
- OpenSSL 编程 - RSA 加密解密
- java 反编译项目_Java 7 –反编译项目硬币
- loss function
- js eval()函数
- 人工智能时代来临,还需要那么多人吗?
- oracle创建目录的命令,使用create database命令手工创建Oracle数据库
- 搜索框,输入关键字过滤对象数组
- 【软件测试】验收测试是以最终用户为主的测试
- iframe框架_性能优化去除iframe脚手架升级方案
- ubuntu安装配置ssmtp
- 北京理工大学—计算机专业课程资源
- java面试题:数组的常用算法实现
- 三轴加速度传感器和六轴惯性传感器_六轴传感器和三轴传感器的区别在哪
- Python练习---turtle绘图之绘制天安门
- 使用docker安装mysql5.7
- 关于android系统的介绍
- GIS开发:分享NASA火灾地图(FIRMS Fire Map)
- 2208988800一个奇怪的数字
热门文章
- 戏说前端之CSS编码规范
- PHP 发送手机短信验证
- 黑客入门——手机wifi定位原理
- 真的,程序员别去外包公司|程序员有话说
- 学习java的心得体会_学习java的心得体会范文.doc
- Error (176310): Can't place multiple pins assigned to pin location Pin_F16
- C语言 希尔排序 使用监视哨
- 图像平铺_制作无缝平铺图像的五个步骤
- 什么时候用到全排列_【什么情况下要除以一个全排列?举例说明最好,万分感激,】作业帮...
- React Native 0.59.x新特性解读