微信支付java開發
配置:
微信開發坑比較多 所以一定要按照開發文檔的要求來進行開發
<開發從第三步開始>
-
公衆號平臺配置
-
功能設置 –> 配置其中的 ①業務域名 ② js接口安全域名 ③ 網頁授權域名
-
基本配置 –> IP白名單配置
-
-
商戶平臺配置
-
賬戶中心–> 下載安全證書 上傳至服務器 (http://域名/證書 能夠訪問)
-
API 安全–> API祕鑰設置 (自定義)
-
開發配置–>支付配置–>公衆號配置–>配置支付授權目錄
-
-
獲取code
-
- 訪問路徑:https://open.weixin.qq.com/connect/oauth2/authorize?
-
- 參數:appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
-
參考鏈接(請在微信客戶端中打開此鏈接體驗):
-
scope爲snsapi_base
-
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
-
scope爲snsapi_userinfo
-
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
參數說明
微信支付java開發配置:
<開發從第三步開始>
參數說明
4. 通過code獲取openid/access_token
參數說明
返回說明 正確時返回的JSON數據包如下:
. 5. 通過openid獲取支付所需參數prepay_id
請求參數
. 6. 通過html(含微信h5支付js)請求後臺攜帶openid請求統一下單接口,並由h5支付js獲取支付參數完成支付
. 7. 訂單詳情查詢,訪問微信訂單查詢接口
. 8. 調用微信refund退款接口
準備工作:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4. 通過code獲取openid/access_token
-
`如果用戶同意授權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE `
redirect_uri:第三步配置的url路徑.—–第三步請求成功之後會自動跳轉到此路徑並攜帶code值
-
獲取code後,請求以下鏈接獲取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
參數說明
參數 | 是否必須 | 說明 |
appid | 是 | 公衆號的唯一標識 |
secret | 是 | 公衆號的appsecret |
code | 是 | 填寫第一步獲取的code參數 |
grant_type | 是 | 填寫爲authorization_code |
返回說明
正確時返回的JSON數據包如下:
-
{ "access_token":"ACCESS_TOKEN",
-
"expires_in":7200,
-
"refresh_token":"REFRESH_TOKEN",
-
"openid":"OPENID",
-
"scope":"SCOPE" }
.
5. 通過openid獲取支付所需參數prepay_id
通過訪問統一下單接口連接:https://api.mch.weixin.qq.com/pay/unifiedorder
在微信支付開發文檔中下載SDK與demo
請求參數
字段名 | 變量名 | 必填 | 類型 | 示例值 | 描述 |
公衆賬號ID | appid | 是 | String(32) | wxd678efh567hg6787 | 微信支付分配的公衆賬號ID(企業號corpid即爲此appId) |
商戶號 | mch_id | 是 | String(32) | 1230000109 | 微信支付分配的商戶號 |
隨機字符串 | nonce_str | 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 隨機字符串,長度要求在32位以內。推薦隨機數生成算法 |
簽名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 通過簽名算法計算得出的簽名值,詳見簽名生成算法 |
商品描述 | body | 是 | String(128) | 騰訊充值中心-QQ會員充值 | 商品簡單描述,該字段請按照規範傳遞,具體請見參數規定 |
商戶訂單號 | out_trade_no | 是 | String(32) | 20150806125346 | 商戶系統內部訂單號,要求32個字符內,只能是數字、大小寫字母_-* 且在同一個商戶號下唯一。詳見商戶訂單號 |
標價金額 | total_fee | 是 | Int | 88 | 訂單總金額,單位爲分,詳見支付金額 |
終端IP | spbill_create_ip | 是 | String(16) | 123.12.12.123 | 支持IPV4和IPV6兩種格式的IP地址。調用微信支付API的機器IP |
通知地址 | notify_url | 是 | String(256) | http://www.weixin.qq.com/wxpay/pay.php | 異步接收微信支付結果通知的回調地址,通知url必須爲外網可訪問的url,不能攜帶參數。 |
交易類型 | trade_type | 是 | String(16) | JSAPI | JSAPI -JSAPI支付 NATIVE -Native支付 APP -APP支付 說明詳見參數規定 |
.
6. 通過html(含微信h5支付js)請求後臺攜帶openid請求統一下單接口,並由h5支付js獲取支付參數完成支付
在html中嵌套
-
$.ajax({
-
type: "POST",
-
url: "/wechat",
-
data: {
-
"openid": "on98b1sRZcShcmKrZVYeE3VQGXTc",
-
"money": "1",
-
"ordernum": odernum
-
},
-
success: function (date) {
-
if (date.code == 200) {
-
// 微信支付必須要重新reload
-
location.reload()
-
//執行微信h5回調函數
-
var obj = {
-
"appId": xxx, //公衆號名稱,由商戶傳入
-
"timeStamp": xxx, //時間戳,自1970年以來的秒數
-
"nonceStr":xxx, //隨機串
-
"package": "prepay_id=" +xxx ,//支付唯一憑證
-
"signType": "MD5", //微信簽名方式:
-
"paySign":xxx, //重新生成簽名
-
}
-
if (typeof WeixinJSBridge == "undefined") {
-
if (document.addEventListener) {
-
document.addEventListener('WeixinJSBridgeReady', onBridgeReady(obj), false);
-
} else if (document.attachEvent) {
-
document.attachEvent('WeixinJSBridgeReady', onBridgeReady(obj));
-
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady(obj));
-
}
-
} else {
-
onBridgeReady(obj);
-
}
-
}
-
}
-
});
-
})
-
function onBridgeReady(){
-
WeixinJSBridge.invoke(
-
'getBrandWCPayRequest', obj,
-
function(res){
-
if(res.err_msg == "get_brand_wcpay_request:ok" ){
-
// 使用以上方式判斷前端返回,微信團隊鄭重提示:
-
//res.err_msg將在用戶支付成功後返回ok,但並不保證它絕對可靠。
-
}
-
});
-
}
.
7. 訂單詳情查詢,訪問微信訂單查詢接口
-
https://api.mch.weixin.qq.com/pay/orderquery
-
<param>:
-
map.put("appid", "wxf874e15f78cc84a7");//APPID
-
map.put("mch_id", "1487005412");//商戶號
-
map.put("out_trade_no", "20190109162035");//訂單編號
-
map.put("nonce_str", "5K8264ILTKCH16CQ2502SI8ZNMTM67VS");//隨時數
.
8. 調用微信refund退款接口
-
接口鏈接:https://api.mch.weixin.qq.com/secapi/pay/refund
-
需要證書 .p12
-
請求參數:
-
refundMessage.put("appid", wxPayConfig.getAppID());
-
refundMessage.put("mch_id", wxPayConfig.getMchID());
-
refundMessage.put("nonce_str", WXPayUtil.generateNonceStr());
-
refundMessage.put("out_trade_no", out_trade_no);//商戶訂單號
-
refundMessage.put("out_refund_no", "SDTK" +String.valueOf(System.currentTimeMillis()));//商戶退款單號
-
refundMessage.put("total_fee", total_fee);//訂單金額
-
refundMessage.put("refund_fee", total_fee);//退款金額
-
String signature = WXPayUtil.generateSignature(refundMessage, wxPayConfig.getKey());
-
refundMessage.put("sign", signature);
準備工作:
域名/證書(1.apiclient_cert.p12:支付必須/2.MP_verify_5dkzuGfuanhFOeA8.txt)