微信小程序支付统一下单接口
2018-09-05 13:50
369 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hello_Java2018/article/details/82422637
微信小程序——支付
1.通过code获取openId
code:用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 api,使用 code 换取 openid 和 session_key 等信息
openid: 用户唯一标识
session_key: 会话密钥
/** * 构建统一下单参数,发给微信服务器 * * @param tradeType * @param body * @param tradeNo 订单号 * @param ip * @return */ private UnifiedOrderRequestData constructData( String tradeNo, int totalFee, String ip, String openid) { UnifiedOrderRequestData data = new UnifiedOrderRequestData. UnifiedOrderReqDataBuilder( WeixinConstant.FEBDA_PAY_BODY, tradeNo, totalFee, ip, WeixinConstant.TRADE_TYPE).setOpenid(openid).build(); // 产生签名信息 data.setSign(WxPayUtil.getSign(data)); return data; }
/** * 利用反射获取Java对象的字段并进行加密,过滤掉sign字段 * @param data * @return * return:String */ public static String getSign(Object data) { StringBuilder stringA = new StringBuilder(); Map<String, String> map = new HashMap<String, String>(); Field[] fields = data.getClass().getDeclaredFields(); Method[] methods = data.getClass().getDeclaredMethods(); for (Field field : fields) { String fieldName = field.getName(); if (field != null && !fieldName.equals("sign")) { String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1); for (Method method : methods) { if (method.getName().equals(getMethodName)) { try { if (method.invoke(data, new Object[]{}) != null && method.invoke(data, new Object[]{}).toString().length() != 0) { map.put(fieldName, method.invoke(data, new Object[]{}).toString()); } } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } } } } } List<Map.Entry<String,String>> mappingList = null; //通过ArrayList构造函数把map.entrySet()转换成list mappingList = new ArrayList<Map.Entry<String,String>>(map.entrySet()); //通过比较器实现比较排序 Collections.sort( mappingList, new Comparator<Map.Entry<String,String>>(){ public int compare(Map.Entry<String,String> mapping1,Map.Entry<String,String> mapping2){ return mapping1.getKey().compareTo(mapping2.getKey()); } } ); for (Map.Entry<String, String> mapping : mappingList) { stringA.append("&").append(mapping.getKey()).append("=").append(mapping.getValue()); } String stringSignTemp = stringA.append("&key=").append(WeixinPayConfig.KEY).substring(1); return WeixinUtil.MD5(stringSignTemp).toUpperCase(); }
/** * 调用微信统一下单接口,返回客户端数据 * * @param tradeType * JSAPI支付 * @return UnifiedOrderResponseData */ private UnifiedOrderResponseData unifiedOrder(String userId, String proId, int price, String ip, String openid,String type,String orderId) { // proId 问题id if(Strings.isNullOrEmpty(ip)){ InetAddress addr = null; try { addr = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ip = addr.getHostAddress().toString(); } /*if (PayApp.theApp.isDebug()) {// 测试时候支付一分钱,买入价值6块的20分钟语音 price = 1;//1分钱 }*/ // 生成请求数据对象 UnifiedOrderRequestData data = constructData(orderId, price, ip, openid); // 调用微信统一下单接口 UnifiedOrderResponseData responseData = WxPayUtil.unifiedOder(data); return responseData; }阅读更多
相关文章推荐
- 微信:微信扫码支付、调用统一下单接口、网站支付 + springmvc
- 微信:微信扫码支付、调用统一下单接口、网站支付 + springmvc
- 微信:微信扫码支付、调用统一下单接口、网站支付 + springmvc
- 微信h5支付统一下单接口,实现用户在h5页面使用微信支付——微信h5支付开发实例7
- 微信:微信扫码支付、调用统一下单接口、网站支付 + springmvc
- 微信小程序开发(五)小程序支付-统一下单
- 原创:微信小程序调用【统一下单】、【支付】、【支付回调】api并处理请求
- 微信小程序支付开发笔记2--生成签名-统一下单-二次签名
- PHP:微信小程序调用【统一下单】【微信支付】【支付回调】API;XML转Array,Array转XML方法(通用)
- 自己开发一套微信支付接口,小程序支付,微信h5支付都能轻松搞定
- C#微信支付统一下单 APP支付接口
- 微信App支付,服务端统一下单
- 微信支付(公众号支付APIJS、app支付)服务端统一下单接口java版
- 玩转小程序支付之付款(统一下单)
- Java使用微信支付-发起统一下单支付接口
- 微信小程序 支付接口 java
- 微信统一下单接口body为中文,报【签名错误】的解决办法
- 微信app支付-统一下单
- 【微信开发】支付-统一下单
- [置顶] 微信小程序支付demo, php开发小程序支付接口实例