app用户微信支付-Java后端
以下是微信官方的交互时序图,统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在商户服务器端完成。
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。
步骤5:商户后台接收支付通知。
下面来看微信接口
一、设置必要参数
public static final String PATERNERKEY = "";//商家的密钥
public static final String APP_ID = "";//APPID
public static final String MINI_ID = "";//小程序ID
public static final String MCH_ID = "";//商户号
public static final String FEE_TYPE = "CNY";//货币类型,人民币
private String NOTIFY_URL = "";//程序后台地址
public static final String TRADE_TYPE = "APP";//支付类型(APP)
public static final String JSAPI_TRADE_TYPE = "JSAPI";//支付类型(小程序)
二、拉取微信预付单
public Map wechatPay(Map inDTO){
Map outDTO=new HashMap();//创建返回对象
//.......省略参数校验
/*主要参数有:
* total_fee 金额,传入单位(元)
* userId 程序用户ID,用于记录订单
* buyType 购买类型 ,可不用
* buyGoodsId 商品ID,自定义
* body 商品描述
* attach 附加数据
*/
// 1.0 拼凑需要的参数
String appid = APP_ID; // 应用ID
String mch_id = MCH_ID; // 商户号
String nonce_str = WXPayUtil.generateNonceStr(); // 生成随机数
String body = inDTO.get("body") == null ? "":inDTO.get("body").toString();//商品描述
String attach = inDTO.get("attach") == null ? "":inDTO.get("attach").toString();//附加数据
String out_trade_no = WXPayUtil.generateNonceStr(); // 生成商户订单号
String fee_type = FEE_TYPE;//货币类型
Double totalFee=Double.parseDouble(inDTO.get("total_fee").toString());