java後臺對微信支付功能的實現
第一次寫微信小程式後臺介面,卻發現微信小程式有太多太多坑了。所以這裡進行一個記錄,防止忘記。
(現在補更一下,一定要和前端開發人員溝通好返回值啊!!最後一步給前端paySign值,結果前端老是報錯requestPayment:fail parameter error: parameter.paySign should be String instead of Undefined;)————就是說paySign值是個未定義的。害的我苦苦找了一晚上和一早上,怎麼都找不到問題,最後讓對方發了一份他寫的程式碼,我開啟後才發現對方取值是
'paySign': res.data.sign····你們體驗過背了半天的鍋是什麼感覺嗎?'paySign'的值居然用sign取,不報錯才怪啊!想要作做微信小程式支付功能開發,首先我們要做一個熱身!(新版本已經可以直接獲取使用者OpenID了,所以直接走下面支付流程吧。)
就是獲取Open_Id。在關注者與公眾號產生訊息互動後,公眾號可獲得關注者的OpenID(加密後的微訊號,每個使用者對每個公眾號的OpenID是唯一的。對於不同公眾號,同一使用者的openid不同)。
這個Open_Id是微信小程式呼叫wx.login方法先獲取code,然後將code傳送到後臺,通過訪問:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
介面來獲取到的Open_Id,如下
/** * 獲取OpenId * * @param js_code 小程式前端傳送的Code值 * @return JSON格式的Open_Id返回值 */ public static JSONObject getOpen_Id(String js_code) { JSONObject json = new JSONObject(); String open_Id = "https://api.weixin.qq.com/sns/jscode2session?appid=wxXXXX2693XXXXXXXe&secret=7f4d62XXXXX2f795815XXXXXXXX&js_code=" + js_code + "&grant_type=authorization_code"; String getOpen_Id = PayUtil.httpRequest(open_Id, "POST", ""); JSONObject fromObject = JsonUtil.StringtoJSON(getOpen_Id); json.put("open_Id", fromObject); return fromObject; }
按照上面步驟:我們可以獲取到這個openid。
————————————————————————————————————————————
接下來,我們就要開始進行支付操作了。
首先,備忘一下,我先把微信支付會用到的幾個必傳引數記錄一下。
appid:微信的應用ID(固定值),也就是你開發的是什麼微信,就填對應的Id
body:商品描述。
mch_id:微信支付商戶資訊號(固定值),需要提前註冊為i系列商戶。當時沒有註冊,讓我等了兩天稽核才開始動手寫支付。
nonce_str:隨機字串。
notify_url:接收微信支付非同步通知回撥地址,後臺可以接收到微信小程式傳送的訂單訊息,有很多很多訊息。
out_trade_no:商戶內部訂單號,這個我有點不明白,我就當是本地訂單索引發送的。
total_fee:訂單總金額,單位為分
trade_type:交易型別JSAPI 公眾號支付 NATIVE 掃碼支付APP APP支付
openid:使用者唯一標識,就是我上面獲取到的那個值,現在要用了。
attach:附加資料,這個是我後面才加入的,我上傳的Deom沒有加入,你們需要的話可以新增進去,因為這個涉及到獲取訂單返回值的某些問題...
除了上面的這幾個必傳參外,涉及到小程式支付的還有一個特殊的必傳參和一個固定值。
Key:商戶祕鑰。(固定值)生成後儲存起來,以後用處大著。
sign:簽名。獲取上面的必傳引數,然後將其轉化為<xml>格式,然後加上key值,通過特定演算法,生成的sign簽名。
反正我就用了這麼幾行程式碼和Demo裡的一些工具方法。完成了微信支付的二次簽名
//微信的應用ID(固定值)
public final static String appid="wx1eXXXXXXXXXXXe";
//微信商號(固定值)
public final static String mch_id="1XXXXXXXXXX81";
//付費方法型別(固定值)
public final static String trade_type="JSAPI";
//商戶金鑰(固定值)
public final static String key="311XXXXXXXXXXXXXXXXXXXa9";
//統一下單API介面連結 (固定值)
public final static String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
/**
* 微信支付呼叫介面
* @param request
* @return JSON形式的引數值
* @throws UnsupportedEncodingException
*/
public static JSONObject wxOnePay(JSONObject param_json,String price) throws UnsupportedEncodingException {
Map<String,String> m=new HashMap<String,String>();
try {
String price1=Integer.toString((int)((Double.parseDouble(price)*100)));
System.out.println("價格是:"+price1+"分");
String notify_url="http://baidu.com/";//寫你們自己的回撥地址
//將獲取到的map值轉換為xml格式
m.put("appid", PayUtil.appid);//微信的應用ID(固定值)
m.put("body",param_json.getString("body") );//商品描述(其實可有可無)
m.put("mch_id", PayUtil.mch_id);//微信支付商戶資訊號(固定值)
m.put("nonce_str",PayUtil.getRandomNumbers());//隨機字串,不長於32位
m.put("notify_url",notify_url);//接收微信支付非同步通知回撥地址,通知url必須為直接可訪問的url,不能攜帶引數。
m.put("out_trade_no",PayUtil.getRandomNumbers());//商戶系統內部的訂單號(咱們沒有做,所以可不填),32個字元內、可包含字母
m.put("total_fee",price1);//訂單總金額,單位為分
m.put("trade_type", PayUtil.trade_type);//固定值
m.put("openid", param_json.getString("openid"));//微信端下的唯一使用者標識
Map<String,String> sPara = PayUtil.paraFilter(m);
String prestr = PayUtil.createLinkString(sPara);
String mysign = PayUtil.sign(prestr, PayUtil.key, "utf-8").toUpperCase();
m.put("sign", mysign);//sign簽名,第一次隨機簽名
//打包要傳送的xml
String respXml = PayUtil.getRequestXML(m);
//發起伺服器請求
String result =PayUtil.httpRequest(PayUtil.url, "POST", respXml);
Map<?,?> map = PayUtil.doXMLParse(result);
//返回狀態碼
String return_code = (String) map.get("return_code");
//返回給小程式端需要的引數
Map<String, String> callbackMap = new HashMap<String, String>();
if(return_code=="SUCCESS"||return_code.equals(return_code)) {
//返回的預付單資訊
String prepay_id = (String) map.get("prepay_id");
Long timeStamp = System.currentTimeMillis() / 1000;//微信是按照分來算的,我們是按照元來算的,所以需要轉換
callbackMap.put("appId", PayUtil.appid);
callbackMap.put("timeStamp", timeStamp+ "");
callbackMap.put("nonceStr",notify_url);
callbackMap.put("signType", "MD5");
callbackMap.put("package", "prepay_id="+prepay_id);
Map<String,String> sPara2 = PayUtil.paraFilter(callbackMap);
String prestrTow = PayUtil.createLinkString(sPara2);
String mysignTow = PayUtil.sign(prestrTow, PayUtil.key, "utf-8").toUpperCase();
//sign簽名,第二次隨機簽名
callbackMap.put("paySign", mysignTow);
JSONObject jsonObject = JSONObject.fromObject(callbackMap);
String respXml2 = PayUtil.getRequestXML(callbackMap);
Log4jUtil.infoLog("CaseController getDetailsCase()").info("傳遞的引數:" + respXml2);
return jsonObject;
}
} catch (Exception e) {
Log4jUtil.infoLog("PayUtil wxOnePay()").error("微信支付工具出錯!:"+e);
e.printStackTrace();
return null;
}
return null;
}
生成簽名的Deom和相關工具類文件:
輸入正確的引數和呼叫工具類中對應的方法,正常情況下,你們的微信支付就已經完成。
——————————————————————————————————————————
接下來就是無(磨)關(人)緊(妖)要(精)的訂單管理了。當然你們可以時情況而定,
因為觸發資金流之後,微信商戶平臺就會自動記錄訂單資訊,你們家產品狗好說話,可以讓甲方直接去商戶平臺看吧。
如果不可以,你的notify_url引數就派上用場了。
微信支付發生,不管成功與否,微信平臺都會非同步傳送訊息到你的回撥介面當中。
使用上面提供的工具類的
PayUtil.doXMLParse(data)方法。將接收的data值傳進去,自動改為MAP格式,到時候你只要按照KEY取微信的回撥值就可以了。
至此,小程式的支付功能算是全部走完。
相關推薦
java後臺對微信支付功能的實現
第一次寫微信小程式後臺介面,卻發現微信小程式有太多太多坑了。所以這裡進行一個記錄,防止忘記。(現在補更一下,一定要和前端開發人員溝通好返回值啊!!最後一步給前端paySign值,結果前端老是報錯requestPayment:fail parameter error: para
spring boot項目之微信支付功能實現詳細介紹
tab 流程 invalid body 正方形 無法 數據 fmt -s 對接微信支付功能主要有以下幾個步驟, 而其第一個關鍵點就是獲取OpenID,在這裏介紹兩種獲取方式: 一、微信授權 微信網頁授權 如果用戶在微信客戶端中訪問第三方網頁,公
微信小程序 使用微信支付功能實現在線支付訂單
navi order lose ray 如果 image 全部 extern base 以前做過PC頁面微信支付,但是這次在小程序 直接調用微信支付功能還是方便很多 先放個微信官方API鏈接:https://pay.weixin.qq.com/wiki/doc/api/wx
微信支付功能實現
< view class= "container"> < input type= "text" bindinput= "getOrderCode" style= "border:1px solid #ccc;"
java服務端,微信支付功能的實現
接入微信的支付功能在java服務端,現在記錄下來這個過程,方便以後用到。程式碼都是參考網路,功能可以實現 實際參考https://github.com/wxpay/WXPay-SDK-Java ①,寫一個介面,作為引數配置的介面,當然也可以不用介
【轉】微信小程序實現微信支付功能(可用)
arr 必須 enc red use sam func 結束 單表 原博: https://blog.csdn.net/fredrik/article/details/79697963 微信小程序實現微信支付功能 直接把裏面的參數替換成你的就
PHP實現 APP端微信支付功能
1.我封裝好的一個支付類檔案,多餘的東西都去除掉了,並且把配置引數放到了這個支付類中,只需要修改Weixinpayandroid方法內的幾個引數就可以直接複製使用: class Wxpayandroid { //引數配置 public $config = array( 'appid' =&
微信小程式:web-view巢狀H5實現微信支付功能解決方案及填坑
最近一個多月加班比較嚴重,偶爾休息一天也是在補睡眠+陪家人,比較長時間沒有來進行總結記錄了。今天不加班,開始為這段時間做的東西進行下經驗總結。 這段時間因為公司需要,接觸了一些.Net前後臺開發,慢慢了解了一些WCF、H5站點、WebService、Soap、Linq等,也
Java 版微信支付功能分享
微信支付越來越成為電商們熱衷的支付方式,微信官方也給分享了微信支付的原始碼,但缺少詳細的指引,對於新手來說會浪費大量的時間。 本場 Chat 主要適用於有微信支付需求但未進行過微信支付開發的開發者們,以案例的形式詳細的講述微信支付的整個流程,參與活動我會給大夥分享可以跑通 Java 原始碼,只需修
微信小程式實現微信支付功能
這裡我直接上程式碼,附有註釋,直接把我的程式碼貼上一下就可以用了,也是自己走了好多的彎路。。,寫在部落格裡做個記錄直接把裡面的引數替換成你的就可以了,前提是你要開通的有微信支付功能,需要商戶號,appid,appsecret,openid,openid的獲取比較簡單,我再寫一
java--spring boot微信支付服務端實現含程式碼(app支付、掃碼支付等)
最近在弄支付寶、微信支付等的事,發現這兩家的文件都寫得很差,demo也讓人看的雲裡霧裡。所以寫篇部落格,來儘量減少後來的同學走的彎路。 首先,若是要做app支付的話,在微信第三方平臺申請APP,若是安卓的話上傳你的keystore和包名,ios上傳bundle id,微信會
PHP實現微信支付功能開發+例項程式碼
namespace Wechat\Controller; use Think\Controller; /** * 父類控制器,需要繼承 * @file ParentController.class.php * @author Gary <[email protected]> *
快速實現微信支付功能
首先去支付寶開發平臺申請支付接入功能,並且填寫正確的包名和APP簽名 1,包名直接在Androidmainfest中檢視 package="com.company.demo"; 2,APP簽名可以用騰訊開發平臺的簽名生成工具Gen_Signature_Android.a
java對微信支付HTTPS伺服器證書更新進行後當前伺服器是否可用驗證
收到了這樣的一個通知:微信支付HTTPS伺服器證書的根證書將於2018-08-23日到期,微信支付計劃於2018-05-29日更換伺服器證書。請通知貴司技術開發人員儘快完成相關驗證,確保安裝新的根
H5調起微信支付功能
需要 con 返回 alert list 訂單 團隊 eve window 第一步:需要後端返回需要的以下參數: 該操作是你提交完訂單信息後在接口所返回的json, 其次將其存儲起來,我用的localStorage var payParams = {
微信支付:手機系統自帶的瀏覽器,調用微信支付如何實現(非掃碼)
所有 價格 驗證 返回 調用 -i 是否為空 支付申請 data- Q:翻看了微信支付的api沒發現支持h5調支付接口的情況(微信js除外),然後卻發現美團的支付成功調用了,這是怎麽實現的? A: 使用微信H5支付即可。H5支付通過URL調起微信APP,
微信支付功能
and ini edm this substring pac pfx inpu code js wx.request({ url: url + ‘/team!jfchongzhi.action?openid=‘ + openid + ‘&weibi
微信公眾號服務號如何開通微信支付功能
開通微信商戶支付平臺 當我們的公眾號認證完成之後,就可以正常使用了,擔憂有很多地方我們就需要用到微信支付了,例如微信商城,拼團的線上支付等等場景。而且現在微信的使用場景非常廣泛,基本上每個人都會攜帶手機且使用微信,所以商戶開通微信支付可以更好的為顧客服務:(只有服務號可以申請微信支付,每個訂閱號有一次機會升
Java專案呼叫微信支付到指定銀行卡
public static EnterpriceToCustomer WXPayToBC(String encBankAcctNo, String encBankAcctName, String bank_code, String desc, String amount) throws Ex
公眾號微信支付java開發,微信支付簽名錯誤,或者一直請求回撥方法問題
本編為原創,如需轉載,請註明出處。 微信支付開發過程中,如果沒有遇到簽名錯誤這個問題或者一直請求回撥方法問題,那麼感覺你開發了一個假對接,網上也有許多列子,以及官網也有微信團隊demo,但是還是有解決不了的各種簽名問題,demo需要手動修改因為他的加密方式會不盡如人意,還有排序問題。好了,話