您的位置:首页 > 移动开发 > 微信开发

微信小程序支付统一下单接口

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: 会话密钥

2.构建统一下单参数,发送微信客户端
/**
* 构建统一下单参数,发给微信服务器
*
* @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;
}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: