微信支付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-mobile.enterfaces.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);//单位为秒

  

 

完整代码看第二章

上一篇:Mac下搭建Ionic+Cordova+Angular打包Android apk 环境


下一篇:cordova获取Android系统权限和Android权限列表