【JAVA版】微信支付方案一詳解
在接入微信支付插件時,如果使用方案一完成,難點還是在getOrderId。這個方法的服務器端實現,還要多參考微信提供的接口文檔。對接起來還是有很多小坑的,希望以下經驗,能給您提供幫助。
參考接入接口 :?https://pay.weixin.qq.com/wiki/doc/api/index.html
管理端后臺的Java主體代碼如下:
/** ?????????*?微信支付獲取預支付訂單號 ?????????*?
- ?????????*?
- 1、封裝數據,進行預支付,獲取統一下單的prepay_id ?????????*?
- 2、驗證是否下單成功,成功后,將簽名數據返回 ?????????*?
說明:
1)其中,WxpayPreConfig類的內容,參考接口文檔,自己拼湊即可。
2)prop.getWxSendUri() =?https://api.mch.weixin.qq.com/pay/unifiedorder
3)附上MD5簽名方法,注意map的排序。
public?static?String?getMD5Sign(Map
說明:這里附上的代碼,僅提供開發思路。可能不全。如果需要源代碼者,再線下聯系。可以提供相關代碼。
如下為,正確統一下單之后,返回的結果數據:
【微信統一下單參數結果】?
在APP一側的JS代碼中,對接如下:
/** ?????????????????*?微信支付 ?????????????????*?微信支付的最小單位是分 ?????????????????*?注意Number(price)?*?100的冗余錯誤,加上parseInt修正 ?????????????????*?parseInt(Number(price)?*?100) ?????????????????*?@param??tradeNo?商戶系統內部的訂單號 ?????????????????*?@param?price?訂單總金額,只能為整數,單位:分(¥) ?????????????????*/ ????????????????function?execWxpay(tradeNo,?price,?desc)?{ ????????????????????????var?data?=?{ ????????????????????????????????tradeNo?:?tradeNo, ????????????????????????????????totalFee?:?price, ????????????????????????????????description?:?'支付訂單' ????????????????????????} ????????????????????????ajax.post('app/wxpay-order-info.action',?data,?function(data)?{ ????????????????????????????????if?(!extApi.isNullObj(data))?{ ????????????????????????????????????????var?wxPay?=?api.require('wxPay'); ????????????????????????????????????????wxPay.payOrder({ ????????????????????????????????????????????????apiKey?:?data.appid, ????????????????????????????????????????????????orderId?:?data.prepayid, ????????????????????????????????????????????????mchId?:?data.partnerid, ????????????????????????????????????????????????nonceStr?:?data.noncestr, ????????????????????????????????????????????????timeStamp?:?data.timestamp, ????????????????????????????????????????????????package?:?'Sign=WXPay', ????????????????????????????????????????????????sign?:?data.sign ????????????????????????????????????????},?function(ret,?err)?{ ????????????????????????????????????????????????if?(!ret.status)?{ ????????????????????????????????????????????????????????var?msg?=?getWxRetErrorCodeMsg(err.code); ????????????????????????????????????????????????????????extApi.alert(msg,?'支付結果'); ????????????????????????????????????????????????} ???????????????????????????????????????????????? ????????????????????????????????????????????????if?(ret.status)?{ ????????????????????????????????????????????????????????closePayWin(); ????????????????????????????????????????????????} ????????????????????????????????????????}); ????????????????????????????????} ????????????????????????}); ????????????????} ????????????????/** ?????????????????*?微信支付失敗時返回的錯誤碼 ?????????????????*?-2:用戶取消 ?????????????????*?-1:未知錯誤,可能的原因:簽名錯誤、未注冊APPID、項目設置APPID不正確、注冊的APPID與設置的不匹配、其他異常等 ?????????????????*?1:apiKey值非法 ?????????????????*/ ????????????????function?getWxRetErrorCodeMsg(code)?{ ????????????????????????switch(code)?{ ????????????????????????????????case?'-2': ????????????????????????????????????????return?'用戶取消'; ????????????????????????????????case?'1': ????????????????????????????????????????return?'apiKey值非法'; ????????????????????????????????default: ????????????????????????????????????????return?'未知錯誤'; ????????????????????????} ????????????????}
正確提交支付后,微信返回的支付成功數據串,示例如下:
【微信支付回調時的String參數】
特別注意:
1)尤其是APP和微信公眾號都有接入的項目,一定要注意二者之間的差異。主要在賬號上,不能混用,否則支付會一直不成功。
2)在附件中,會攜帶主要的Java類方法。但可能還是會不全。
以上內容,希望對您有用。
附件: wxpay.zip 3.87KB 下載次數:1次
Java 移動APP
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。