
/**
* 获取小程序的access_token
* @return
*/
public String getAccessToken() {
/*if(RedisUtil.hasKey(accessTokenToRedis)){
return RedisUtil.get(accessTokenToRedis);
}*/
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+wechatpayAppid+"&secret="+wechatpayAppsecret)
.get()
.build();
try {
Response response = client.newCall(request).execute();
Gson gson=new Gson();
Type mapType = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, String> map = gson.fromJson(response.body().string(), mapType);
//7200秒失效
//RedisUtil.set(accessTokenToRedis,map.get("access_token"),7000);
return map.get("access_token");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 发货操作
* @param dto
* @return
*/
public Map<String, Object> uploadShippingInfo(UploadShippingInfoDto dto) {
String accessToken = getAccessToken();
String format = DateUtil.format(new Date(), "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Map<String,Object> param=new HashMap<>();
//param.put("access_token",accessToken);
Map<String,Object> orderKey=new HashMap<>();
orderKey.put("order_number_type",1);
orderKey.put("mchid",wechatpayMchid);
orderKey.put("out_trade_no",dto.getOutTradeNo());
param.put("order_key",orderKey);
param.put("logistics_type",1);
param.put("delivery_mode",1);
List<Map<String,Object>> shippingList=new ArrayList<>();
Map<String,Object> shippingListMap=new HashMap<>();
shippingListMap.put("tracking_no",dto.getTrackingNo());
/**
* 编码详见
* https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/get_delivery_list?access_token=85_jL0AcektxhTuYO9RujtOPX2Ohf6i5zuWlNRJSc4gK0opZy76517YOV4ecOrheVR0ogq8ORF0WoZa-N-M91muD6g9HHWIaBPUmq0IPmHMTPZd2OpY0LK2SqjteHUTIBdAGANCV
*/
shippingListMap.put("express_company",dto.getExpressCompany());
shippingListMap.put("item_desc",dto.getItemDesc());
Map<String,Object> contact=new HashMap<>();
contact.put("consignor_contact",dto.getConsignorContact());
contact.put("receiver_contact",dto.getReceiverContact());
shippingListMap.put("contact",contact);
shippingList.add(shippingListMap);
param.put("shipping_list",shippingList);
param.put("upload_time",format);
Map<String,Object> payer=new HashMap<>();
payer.put("openid",dto.getOpenid());
param.put("payer",payer);
Gson gson = new Gson();
String s = gson.toJson(param);
System.out.println(s);
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json;charset=utf-8");
String json = s;
RequestBody body = RequestBody.create(json,mediaType);
Request request = new Request.Builder()
.url("https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token="+accessToken)
.addHeader("content-type", "application/json")
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
String string = response.body().string();
Type mapType = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> map = gson.fromJson(string, mapType);
System.out.println(string);
return map;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
WeChatPayment weChatPayment=new WeChatPayment();
String accessToken = weChatPayment.getAccessToken();
System.out.println(accessToken);
UploadShippingInfoDto dto=new UploadShippingInfoDto();
dto.setTrackingNo("323244567777");
dto.setExpressCompany("OTHER");//没有邮政电商标快,所以选择其他
dto.setItemDesc("微信红包抱枕");
dto.setConsignorContact("134****7296");
dto.setReceiverContact("134****7296");
dto.setOpenid("otrMZ7SSsffe4EcN0qLCCuTyH3ng");
dto.setOutTradeNo("1843820608564105216");
Map<String, Object> map = weChatPayment.uploadShippingInfo(dto);
System.out.println(map);
}
package com.yami.shop.payment.dto;
import lombok.Data;
@Data
public class UploadShippingInfoDto {
//微信商户订单号
private String outTradeNo;
//发货openID
private String openid;
//物流单号
private String trackingNo;
//物流公司编码
private String expressCompany;
//商品名称
private String itemDesc;
//发件人联系方式
private String consignorContact;
//发件人联系方式
private String receiverContact;
}