前沿
我是一名iOS開發(fā)者 最近由于工作的原因 由我來處理服務器后臺集成第三方支付的功能 語言是Java 順水推舟 就學了下 Java語法
配置
需要的工具 :
創(chuàng)建項目
打開Eclipse 首先要配置下我們的Tomcat 教程
-
創(chuàng)建動態(tài)Web項目
配置 Web Project 我的Tomcat是8.0 就選擇8.0
文件目錄
需要說明下
在WebContent中的lib文件目錄下 存放我們的jar 文件
在Java Resources 目錄下 存放我們的代碼文件
把這兩個工具文件拖入到項目中 方便我們快速開發(fā) 工具文件我會放到Github上面 -
創(chuàng)建接口文件
Package
是選擇哪個文件目錄下面
Superclass
選擇繼承HttpServlet
接下來就可以寫我們的接口代碼了
創(chuàng)建幾個參數(shù) 把相應的信息填寫進去
// 微信開發(fā)平臺應用id
public static String APP_ID = "";
// 財付通商戶號
public static String PARTNER_ID = "";
// 商戶號對應的密鑰
public static String PARTNER_KEY = "";
// 統(tǒng)一下單
public static String URL_UNIFIEDORDER = "";
// 接收財付通通知的URL
public static String NOTIFY_URL = "";
在 doPost
方法里面處理我們的訂單簽名
1.填寫簽名訂單信息
- 初始化
PrepayIdRequestHandler
類 微信寫好一個封裝案例,你可以根據(jù)服務器需求放刨,自己定義網(wǎng)絡請求框架
PrepayIdRequestHandler handler =new PrepayIdRequestHandler(req, resp);
- 填寫相應的參數(shù)
// 統(tǒng)一下單的接口(調(diào)用微信支付服務器需要的接口)--->公開的
handler.setGateUrl(URL_UNIFIEDORDER);
// 設置密鑰
handler.setKey(PARTNER_KEY);
// 設置應用的ID
handler.setParameter("appid", APP_ID);
根據(jù)微信文檔的要求 填寫相應的信息 這里我就不往下寫相應的參數(shù)信息了 微信文檔寫的很清楚
唯一想提的是 setParameter 方法就跟iOS里面設置字典一樣 都是key和Value
2.調(diào)用微信統(tǒng)一下單接口(目的:獲取prepay_id)
- 調(diào)用
sendPrepay
方法獲取prepay_id
這里微信返回的數(shù)據(jù)是XML數(shù)據(jù)格式sendPrepay
方法 返回的是一個Map 集合 在iOS里面就叫做 字典
Map paramsMap = handler.sendPrepay();
String prepay_id = (String) paramsMap.get("prepay_id");
- 處理接口返回信息進行二次簽名
- 這里需要注意的是 二次簽名和一次簽名,參數(shù)不一樣 注意官網(wǎng)文檔
OrderResult orderResult=new OrderResult();
//清空集合 重新 賦值
handler.clear();
String noncestr = (String) paramsMap.get("noncestr");
String timestamp = WXUtil.getTimeStamp();
// 密鑰
handler.setKey(PARTNER_KEY);
// 設置應用的ID
handler.setParameter("appid", APP_ID);
// 預付單ID
handler.setParameter("prepayid", prepay_id);
// 擴展字段
handler.setParameter("package", "Sign=WXPay");
// 商戶號
handler.setParameter("partnerid", PARTNER_ID);
// 隨機字符串
handler.setParameter("noncestr", noncestr);
// 時間戳
handler.setParameter("timestamp", timestamp);
// 進行二次簽名(簽名參數(shù)不一樣)
// 第一次簽名:對訂單信息簽名巧娱,獲取prepay_id
// 第二次簽名:對支付信息進行簽名
sign = handler.createMD5Sign();
OrderBean orderBean = new OrderBean();
orderBean.setAppid(APP_ID);
orderBean.setNoncestr(noncestr);
orderBean.setPackageValue("Sign=WXPay");
orderBean.setPartnerid(PARTNER_ID);
orderBean.setPrepayid(prepay_id);
orderBean.setTradeType((String) paramsMap.get("trade_type"));
orderBean.setSign(sign);
orderBean.setTimestamp(timestamp);
orderResult.setOrderBean(orderBean);
- 將model轉json數(shù)據(jù)格式 返回客戶單
Gson gson=new Gson();
//解析成json字符串
String jsonstr=gson.toJson(orderResult);
resp.getWriter().print(jsonstr);
以上java服務器端微信支付代碼完成 客服端的代碼我就不貼了
dome地址