色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Java后臺實現(xiàn)微信支付和微信退款

瀏覽:165日期:2022-05-30 16:37:23

微信支付流程

都是我自己工作中開發(fā)的,親測可用,不喜勿噴。

controller中我是這么寫的,你們需要根據(jù)自己的業(yè)務(wù)需求改動。ResponseBean是我自己封裝的,你們可以改成你們想要的形式。

/** * 微信統(tǒng)一下單接口 * @return */ @RequestMapping(value = '/doUnifiedOrder', method = RequestMethod.POST) public ResponseBean doUnifiedOrder(@RequestBody Map<String,Object> req) { Map resultMap=new HashMap(); String openid = (String) req.get('openId'); WXPay wxpay =null; try { //初始化證書 myConfig.initCert(); wxpay= new WXPay(myConfig); } catch (Exception e) { e.printStackTrace(); } //生成的隨機字符串 String nonce_str = WXPayUtil.generateNonceStr(); //獲取客戶端的ip地址 //獲取本機的ip地址 InetAddress addr = null; try { addr = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } //支付金額,需要轉(zhuǎn)成字符串類型,否則后面的簽名會失敗 String payOutMoney = WxMoney.changeY2F(String.valueOf(req.get('money'))); String tradeName = (String) req.get('tradeName'); if(tradeName!=null&&tradeName.length()>0){ }else{ tradeName = '課程支付'; } String body = tradeName; //商戶訂單號 String out_trade_no= WXPayUtil.generateNonceStr(); //統(tǒng)一下單接口參數(shù) HashMap<String, String> data = new HashMap<String, String>(); data.put('appid', 你的appid); data.put('mch_id', 商戶id); data.put('nonce_str', nonce_str); data.put('body', body); data.put('out_trade_no',out_trade_no); data.put('total_fee', payOutMoney); data.put('spbill_create_ip', '127.0.0.1'); data.put('notify_url', 回調(diào)地址); data.put('trade_type','JSAPI'); data.put('openid', openid); try { Map<String, String> rMap = wxpay.unifiedOrder(data); String return_code = (String) rMap.get('return_code'); String result_code = (String) rMap.get('result_code'); String nonceStr = WXPayUtil.generateNonceStr(); resultMap.put('nonceStr', nonceStr); Long timeStamp = System.currentTimeMillis() / 1000; if ('SUCCESS'.equals(return_code) && return_code.equals(result_code)) { String prepayid = rMap.get('prepay_id'); resultMap.put('package', 'prepay_id='+prepayid); resultMap.put('signType', 'MD5'); //這邊要將返回的時間戳轉(zhuǎn)化成字符串,不然小程序端調(diào)用wx.requestPayment方法會報簽名錯誤 resultMap.put('timeStamp', timeStamp + ''); //再次簽名,這個簽名用于小程序端調(diào)用wx.requesetPayment方法 resultMap.put('appId',myConfig.getAppID()); String sign = WXPayUtil.generateSignature(resultMap, myConfig.getKey()); resultMap.put('paySign', sign); resultMap.put('out_trade_no',out_trade_no); ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),'微信支付',resultMap); return responseBean; }else{ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),'微信支付失敗','微信支付失敗');return responseBean; } } catch (Exception e) { ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),'微信支付失敗','微信支付失敗'); e.printStackTrace(); return responseBean; } }

微信退款代碼(需要傳退款的訂單id)

public ResponseBean refund(Map<String, Object> req) { Map resultMap=new HashMap(); String buyId = (String) req.get('buyId'); WXPay wxpay =null; try { myConfig.initCert();//初始化證書 wxpay= new WXPay(myConfig); } catch (Exception e) { e.printStackTrace(); } //生成的隨機字符串 String nonce_str = WXPayUtil.generateNonceStr(); //獲取客戶端的ip地址 //獲取本機的ip地址 InetAddress addr = null; try { addr = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } //支付金額,需要轉(zhuǎn)成字符串類型,否則后面的簽名會失敗// int total_fee= (int) req.get('money'); String payOutMoney = WxMoney.changeY2F(String.valueOf(req.get('money')));// String body = (String) req.get('z'); //商戶訂單號 String out_trade_no= WXPayUtil.generateNonceStr(); //統(tǒng)一下單接口參數(shù) HashMap<String, String> data = new HashMap<String, String>(); try { data.put('appid', myConfig.getAppID()); data.put('mch_id', myConfig.getMchID()); data.put('nonce_str', nonce_str); data.put('sign_type', 'MD5'); data.put('out_trade_no',buyId);//微信訂單號 data.put('out_refund_no', out_trade_no);//商戶退款單號 data.put('total_fee',payOutMoney);//支付金額,微信支付提交的金額是不能帶小數(shù)點的,且是以分為單位,這邊需要轉(zhuǎn)成字符串類型,否則后面的簽名會失敗 data.put('refund_fee',payOutMoney);//退款總金額,訂單總金額,單位為分,只能為整數(shù) //MD5運算生成簽名,這里是第一次簽名,用于調(diào)用統(tǒng)一下單接口 String sign = WXPayUtil.generateSignature(data, myConfig.getKey()); data.put('sign', sign); Map<String, String> rMap = wxpay.refund(data); String return_code = (String) rMap.get('return_code'); String result_code = (String) rMap.get('result_code'); Long timeStamp = System.currentTimeMillis() / 1000; if ('SUCCESS'.equals(return_code) && return_code.equals(result_code)) {ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),'微信退款成功',rMap);return responseBean; }else{ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),'微信退款失敗','微信支付失敗');return responseBean; } } catch (Exception e) { ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),'微信退款失敗','微信支付失敗'); e.printStackTrace(); return responseBean; } }

需要用到的工具類

Java后臺實現(xiàn)微信支付和微信退款

然后在MyConfig中配置一下你們的小程序參數(shù)就行了,如果需要添加退款功能必須配置商戶證書(對應(yīng)在你項目中的位置)。不需要的話就把initCert方法去掉。

public class MyConfig extends WXPayConfig { @Value('${res.imgPath}') public String imgPath; private byte[] certData; @Override public String getAppID() { return '你的小程序id'; } @Override public String getMchID() { return '商戶id'; } @Override public String getKey() { return '商戶秘鑰'; } @Override public InputStream getCertStream() { ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData); return certBis; } @Override public int getHttpConnectTimeoutMs() { return 8000; } @Override public int getHttpReadTimeoutMs() { return 10000; } @Override IWXPayDomain getWXPayDomain() { return new IWXPayDomain() { @Override public void report(String domain, long elapsedTimeMillis, Exception ex) { } @Override public DomainInfo getDomain(WXPayConfig config) {return new DomainInfo('api.mch.weixin.qq.com', false); } }; } @Override public void initCert() throws Exception { String certPath = this.imgPath+'/upload/cert/'+'apiclient_cert.p12';//從微信商戶平臺下載的安全證書存放的目錄 System.out.println(certPath); File file = new File(certPath); InputStream certStream = new FileInputStream(file); this.certData = new byte[(int) file.length()]; certStream.read(this.certData); certStream.close(); }}

到此這篇關(guān)于Java后臺實現(xiàn)微信支付和微信退款的文章就介紹到這了,更多相關(guān)Java 微信支付和微信退款內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: 微信
相關(guān)文章:
主站蜘蛛池模板: 欧美.成人.综合在线 | 亚洲福利影视 | 国产伦码精品一区二区三区 | 青青影院一区二区免费视频 | 亚洲一区二区三区在线播放 | 日韩欧美视频一区二区在线观看 | 欧美亚洲国产日韩一区二区三区 | 成年人三级网站 | 久久精品国产精品亚洲毛片 | 九九在线观看视频 | 特级a欧美做爰片毛片 | 狼人激情网 | 免费人成网站免费看视频 | 九九re6精品视频在线观看 | 国产一区第一页 | 一区二区三区免费精品视频 | 欧美在线成人午夜网站 | 国产精品亚洲视频 | 男女午夜性爽快免费视频不卡 | 色偷偷女男人的天堂亚洲网 | 欧美精品1 | 亚洲国产日韩成人综合天堂 | 在线精品自拍 | 欧美一区二区三区久久综 | 老王午夜69精品影院 | 午夜在线亚洲男人午在线 | 网禁呦萝资源网站在线观看 | 亚洲欧美自拍一区 | 黄色欧美视频 | 亚洲免费国产 | 久草在线观看视频 | 香蕉视频亚洲一级 | 免费一级肉体全黄毛片 | 精品久久久久久中文字幕网 | 91情侣高清精品国产 | 一级特级毛片 | 一区视频在线播放 | 亚洲男女在线 | 欧美骚视频 | 亚洲 欧美 成人 | 日本高清在线中文字幕网 |