1. 程式人生 > >獲取微信支付所需簽名等

獲取微信支付所需簽名等

mode auto ppi rate one url con turn sub

@RequestMapping(value = "/toPay", method = RequestMethod.POST)
@ResponseBody
public String getShowCode(@RequestParam(value = "openid", required = false) String openid,
@RequestParam(value = "shouprices", required = false) String total_fee,
@RequestParam(value = "xiaid", required = false) String xiaId,
@RequestParam(value = "recharge", required = false) String recharge,
@RequestParam(value = "kuaikeId", required = false) String kuaikeId, HttpServletRequest request,
ModelMap model) throws IOException {

// 網頁授權後獲取傳遞的參數
String orderNo = System.currentTimeMillis() + getRandomString(5);
// String money = "0.01";
// 金額轉化為分為單位
// float sessionmoney = Float.parseFloat(money);
// String finalmoney = String.format("%.2f", sessionmoney);
// finalmoney = finalmoney.replace(".", "");

// 商戶相關資料
Properties p = new Properties();
InputStream input = R_apppayController.class.getResourceAsStream("/payConfig.properties");
p.load(input);
String appid = p.get("APP_ID").toString();
String appsecret = p.get("APPSECRET").toString();
String mch_id = p.get("MCH_ID").toString();// 郵件裏的MCHID
String partnerkey = p.get("API_KEY").toString();// 在微信商戶平臺pay.weixin.com裏自己生成的那個key
String spbill_create_ip = p.get("CREATE_IP").toString();
double fee = Double.parseDouble(total_fee) * 100;
int a = (int) fee;
String total = String.valueOf(a);

// String openId = "oX0yLxLnmsLtK2POMWioeBSRFBFc";//用oath授權得到的openid

// 獲取openId後調用統一支付接口https://api.mch.weixin.qq.com/pay/unifiedorder
String currTime = TenpayUtil.getCurrTime();
// 8位日期
String strTime = currTime.substring(8, currTime.length());
// 四位隨機數
String strRandom = TenpayUtil.buildRandom(4) + "";
// 10位序列號,可以自行調整。
String strReq = strTime + strRandom;

// 子商戶號 非必輸
// String sub_mch_id="";
// 設備號 非必輸
String device_info = "";
// 隨機數
String nonce_str = strReq;
// 商品描述
// String body = describe;

// 商品描述根據情況修改
String body = "支付";
// 附加數據
// String attach = userId;
// 商戶訂單號
String out_trade_no = orderNo;
// int intMoney = Integer.parseInt(finalmoney);

// 總金額以分為單位,不帶小數點
// int total_fee = intMoney;
// 訂單生成的機器 IP

// 訂 單 生 成 時 間 非必輸
// String time_start ="";
// 訂單失效時間 非必輸
// String time_expire = "";
// 商品標記 非必輸
// String goods_tag = "";


String attach = "";

// 這裏notify_url是 支付完成後微信發給該鏈接信息,可以判斷會員是否支付成功,改變訂單狀態等。
String notify_url = p.get("RECHARGE_URL").toString();

String trade_type = "JSAPI";//微信支付
// 非必輸
// String product_id = "";
SortedMap<String, String> packageParams = new TreeMap<String, String>();
packageParams.put("appid", appid);
packageParams.put("mch_id", mch_id);
packageParams.put("nonce_str", nonce_str);
packageParams.put("body", body);
// packageParams.put("attach", attach);
packageParams.put("out_trade_no", out_trade_no);
packageParams.put("attach", attach);
packageParams.put("total_fee", total);
// packageParams.put("total_fee", "finalmoney");
packageParams.put("spbill_create_ip", spbill_create_ip);
packageParams.put("notify_url", notify_url);

packageParams.put("trade_type", trade_type);
packageParams.put("openid", openid);

RequestHandler reqHandler = new RequestHandler(null, null);
reqHandler.init(appid, appsecret, partnerkey);

String sign = reqHandler.createSign(packageParams);
String xml = "<xml>" + "<appid>" + appid + "</appid>" + "<mch_id>" + mch_id + "</mch_id>" + "<nonce_str>"
+ nonce_str + "</nonce_str>" + "<sign><![CDATA[" + sign + "]]></sign>" + "<body><![CDATA[" + body
+ "]]></body>" + "<out_trade_no>" + out_trade_no + "</out_trade_no>" + "<total_fee>" + total
+ "</total_fee>" + "<attach>" + attach + "</attach>" + "<spbill_create_ip>" + spbill_create_ip
+ "</spbill_create_ip>" + "<notify_url>" + notify_url + "</notify_url>" + "<trade_type>" + trade_type
+ "</trade_type>" + "<openid>" + openid + "</openid>" + "</xml>";
System.out.println(xml);
String createOrderURL = p.get("UFDODER_URL").toString();
String prepay_id = "";
try {
prepay_id = new GetWxOrderno().getPayNo(createOrderURL, xml);
if (prepay_id.equals("")) {
System.out.println("統一支付接口獲取預支付訂單出錯");
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
SortedMap<String, String> finalpackage = new TreeMap<String, String>();
String appid2 = appid;
String timestamp = Sha1Util.getTimeStamp();
String nonceStr2 = nonce_str;
String packages = "prepay_id=" + prepay_id;
finalpackage.put("appId", appid2);
finalpackage.put("timeStamp", timestamp);
finalpackage.put("nonceStr", nonceStr2);
finalpackage.put("package", packages);
finalpackage.put("signType", "MD5");
String finalsign = reqHandler.createSign(finalpackage);
Date date = new Date();
String product_id = getRandomString(5) + System.currentTimeMillis();
String order_no = System.currentTimeMillis() + getRandomString(3);

// return total;
return "\‘timestamp‘:\"" + timestamp // 這裏的也是小寫~~
+ "\",‘nonceStr‘:\"" + nonceStr2 + "\",‘paySign‘:\"" + finalsign + "\",‘package‘:\"" + packages + "\"";

}

獲取微信支付所需簽名等