一、Native模式
Native支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。
微信扫码支付开发者文档
二、统一下单
1、下载demo与SDK
sdk与demo中解压后有接口可以直接用。
WXPay中包括了基本用到的接口,注释也很清楚。直接使用就可以。
我调用的代码:
WXPayConfig wxPayConfig = new WxConfig();
WXPay wxPay = null;
Map<String, String> map = null;
try {
wxPay = new WXPay(wxPayConfig, WxConfig.notifyUrl);
Map<String, String> param = putParam(request);
// 标价金额
param.put("total_fee", orderInfoBean.getOrderMoney());
// 商户订单号
param.put("out_trade_no", orderNo);
map = wxPay.unifiedOrder(param);
if (map == null) {
return ReturnMessage.fail(0, "程序错误");
}
// 添加sign信息和微信订单号
orderInfoBean.setSign(map.get("sign"));
int generatorOrder = iOrderDao.generatorOrder(orderInfoBean);
logger.info("插入订单返回结果:{}", generatorOrder);
if (generatorOrder == 0) {
return ReturnMessage.fail(45, "生成订单失败");
}
map.put("orderNo", orderInfoBean.getOrderNo());
} catch (Exception e) {
e.printStackTrace();
}
WxConfig:
public class WxConfig extends WXPayConfig {
// 支付key
public static final String KEY = "自己配置";
// 公众账号ID
public static final String APPID = "自己的";
// 商户号
public static final String mchId = "自己的";
// 设备号
public static final String deviceInfo = "WEB";
// 商品描述
public static final String body = "起个名,给用户扫码看的";
// 商品详情
public static final String detail = "";
// 签名类型
public static final String signType = "MD5";
// 通知地址
public static final String notifyUrl = "外网可以访问的地址";
// 交易类型
public static final String tradeType = "NATIVE";
// 当前时间
private static Date localTime = new Date();
// 交易起始时间 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010
public static String getTimeStart() {
return DateUtil.parseDateToString(localTime, DateUtil.DATE_FORMAT_COMPACTFULL);
}
// 交易结束时间 现在时间加上1小时
public static String getTimeExpire() {
return DateUtil.afterNHoursDate(getTimeStart(), 1, DateUtil.DATE_FORMAT_COMPACTFULL);
}
@Override
String getAppID() {
return this.APPID;
}
@Override
String getMchID() {
return this.mchId;
}
@Override
String getKey() {
return this.KEY;
}
@Override
InputStream getCertStream() {
return null;
}
@Override
IWXPayDomain getWXPayDomain() {
return new IWXPayDomain() {
@Override
public void report(String domain, long elapsedTimeMillis, Exception ex) {
}
@Override
public DomainInfo getDomain(WXPayConfig config) {
DomainInfo domainInfo = new DomainInfo("api.mch.weixin.qq.com", true);
return domainInfo;
}
};
}
}