微信支付wxpay -- 移动端app第一章节 -- 注意点
配置文件中
1.app_id :是移动端相关的appId,在微信支付平台中-->产品中心-->APPID授权管理-->里面的列表中APPID,即时这个
2.BUSINESS_CODE : 商户号--即在代码中获取的 MchID ,支付平台(pay.weixin.qq.com....)-->产品中心--> 开发配置 -->商户信息(在开发配置中,还可以配置公众号支付的jsapi支付的目录,和扫码支付的回调连接)
3.API_KEY :在微信支付平台中-->账户中心-->api安全--api秘钥设置(在API调用时用来按照指定规则对你的请求参数进行签名,服务器收到你的请求时会进行签名验证,既可以界定你的身份也可以防止其他人恶意篡改请求数据。)
4.APIV3_KEY:在微信支付平台中-->账户中心--> apiv3秘钥,(调用APIv3的下载平台证书接口、处理回调通知中报文时,要通过该密钥来解密信息,防止报文被他人恶意篡改)
5.SIGN_TYPE:签名类型,默认MD5,一般默认即可
6.PEM_ADDRESS:证书地址,类似(/wxConfig/apiclient_cert.p12)
7.NOTIFY_URL:异步通知地址,比如(http://test-xxx.com/wxAppPay/notify),不可带参数
8.重点:微信支付的签名,一共生成2次,第一次是在生成预支付订单的时候,参数如下
//生成商户订单号,不可重复 String out_trade_no = "wxpay" + System.currentTimeMillis(); data.put("appid", config.getAppID());//应用ID data.put("mch_id", config.getMchID());//商户号 data.put("nonce_str", WXPayUtil.generateNonceStr());//随机字符串,不长于32位。推荐随机数生成算法 String body = "新脸谱微信订单支付-测试-"+ System.currentTimeMillis(); data.put("body", body); //商品描述 data.put("out_trade_no", out_trade_no); //商户订单号 data.put("total_fee", total_fee); //总金额 data.put("spbill_create_ip", spbillCreateIp);//自己的服务器IP地址 ---点击支付的机器IP data.put("notify_url", NOTIFY_URL);//异步通知地址(请注意必须是外网) data.put("trade_type", TRADE_TYPE_APP);//交易类型 data.put("attach", attach);//附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 String sign1 = WxMD5Util.getSign(data);------------------------------------------------------------------------在该处生成签名 data.put("sign", sign1); //签名
第二次是在返回给移动端之前,参加生成签名字段有且只能是6个,分别为appid、partnerid、prepayid、package、noncestr和timestamp,而且都必须是小写,可能移动端app需要的带驼峰,但是参加支付的签名一不是驼峰的那些,如下代码
map = new HashMap<>(); //返回APP端的数据 //参加调起支付的签名字段有且只能是6个,分别为 appid、partnerid、prepayid、package、noncestr 和 timestamp,而且都必须是小写---------start--------------------- map.put("appid", result.get("appid")); map.put("partnerid", result.get("mch_id")); map.put("prepayid", result.get("prepay_id")); map.put("package", "Sign=WXPay"); map.put("noncestr", result.get("nonce_str")); String signTimstamp = String.valueOf(System.currentTimeMillis() / 1000); map.put("timestamp", signTimstamp);//单位为秒