一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java實現微信企業付款到個人

java實現微信企業付款到個人

2021-06-02 14:17Andyzty Java教程

這篇文章主要為大家詳細介紹了java實現微信企業付款到個人功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

微信企業付款到個人的php實現代碼,供大家參考,具體內容如下

企業付款實現企業向個人付款,實現付款到用戶零錢。項目實現了企業付款到個人和企業付款個人賬單查詢。代碼包括簽名實現,雙向證書驗證,付款功能等

支付流程

付款功能

企業付款到授權用戶的零錢

企業付款注意注意:
1、所有接口需要雙向證書驗證
2、需要設置接口秘鑰,簽名用

詳細參考:微信企業付款開發文檔

項目結構

和上一篇一樣,需要配置證書以及商戶id、appid等

java實現微信企業付款到個人

支付功能

包含企業轉賬和企業轉賬查詢

 

java" id="highlighter_456200">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package org.andy.wxpay.controller;
 
import java.util.hashmap;
import java.util.map;
 
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
 
import org.andy.wxpay.model.jsonresult;
import org.andy.wxpay.model.responsedata;
import org.andy.wxpay.utils.collectionutil;
import org.andy.wxpay.utils.configutil;
import org.andy.wxpay.utils.httputils;
import org.andy.wxpay.utils.payutil;
import org.andy.wxpay.utils.serializerfeatureutil;
import org.andy.wxpay.utils.stringutil;
import org.andy.wxpay.utils.webutil;
import org.andy.wxpay.utils.xmlutil;
import org.apache.log4j.logger;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestmethod;
 
import com.alibaba.fastjson.json;
 
/**
 * 創建時間:2016年11月9日 下午5:49:00
 *
 * @author andy
 * @version 2.2
 */
 
@controller
@requestmapping("/transfer")
public class transfercontroller {
 
 private static final logger log = logger.getlogger(transfercontroller.class);
 
 private static final string transfers_pay = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; // 企業付款
 
 private static final string transfers_pay_query = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo"; // 企業付款查詢
 
 private static final string app_id = configutil.getproperty("wx.appid");
 
 private static final string mch_id = configutil.getproperty("wx.mchid");
 
 private static final string api_secret = configutil.getproperty("wx.api.secret");
 
 /**
 * 企業向個人支付轉賬
 * @param request
 * @param response
 * @param openid 用戶openid
 * @param callback
 */
 @requestmapping(value = "/pay", method = requestmethod.post)
 public void transferpay(httpservletrequest request, httpservletresponse response, string openid, string callback) {
 log.info("[/transfer/pay]");
 //業務判斷 openid是否有收款資格
 
 map<string, string> restmap = null;
 try {
  map<string, string> parm = new hashmap<string, string>();
  parm.put("mch_appid", app_id); //公眾賬號appid
  parm.put("mchid", mch_id); //商戶號
  parm.put("nonce_str", payutil.getnoncestr()); //隨機字符串
  parm.put("partner_trade_no", payutil.gettransferno()); //商戶訂單號
  parm.put("openid", openid); //用戶openid
  parm.put("check_name", "no_check"); //校驗用戶姓名選項 option_check
  //parm.put("re_user_name", "安迪"); //check_name設置為force_check或option_check,則必填
  parm.put("amount", "100"); //轉賬金額
  parm.put("desc", "測試轉賬到個人"); //企業付款描述信息
  parm.put("spbill_create_ip", payutil.getlocalip(request)); //服務器ip地址
  parm.put("sign", payutil.getsign(parm, api_secret));
 
  string restxml = httputils.posts(transfers_pay, xmlutil.xmlformat(parm, false));
  restmap = xmlutil.xmlparse(restxml);
 } catch (exception e) {
  log.error(e.getmessage(), e);
 }
 
 if (collectionutil.isnotempty(restmap) && "success".equals(restmap.get("result_code"))) {
  log.info("轉賬成功:" + restmap.get("err_code") + ":" + restmap.get("err_code_des"));
  map<string, string> transfermap = new hashmap<>();
  transfermap.put("partner_trade_no", restmap.get("partner_trade_no"));//商戶轉賬訂單號
  transfermap.put("payment_no", restmap.get("payment_no")); //微信訂單號
  transfermap.put("payment_time", restmap.get("payment_time")); //微信支付成功時間
  webutil.response(response,
   webutil.packjsonp(callback,
    json.tojsonstring(new jsonresult(1, "轉賬成功", new responsedata(null, transfermap)),
     serializerfeatureutil.features)));
 }else {
  if (collectionutil.isnotempty(restmap)) {
  log.info("轉賬失敗:" + restmap.get("err_code") + ":" + restmap.get("err_code_des"));
  }
  webutil.response(response, webutil.packjsonp(callback, json
   .tojsonstring(new jsonresult(-1, "轉賬失敗", new responsedata()), serializerfeatureutil.features)));
 }
 }
 
 /**
 * 企業向個人轉賬查詢
 * @param request
 * @param response
 * @param tradeno 商戶轉賬訂單號
 * @param callback
 */
 @requestmapping(value = "/pay/query", method = requestmethod.post)
 public void orderpayquery(httpservletrequest request, httpservletresponse response, string tradeno,
  string callback) {
 log.info("[/transfer/pay/query]");
 if (stringutil.isempty(tradeno)) {
  webutil.response(response, webutil.packjsonp(callback, json
   .tojsonstring(new jsonresult(-1, "轉賬訂單號不能為空", new responsedata()), serializerfeatureutil.features)));
 }
 
 map<string, string> restmap = null;
 try {
  map<string, string> parm = new hashmap<string, string>();
  parm.put("appid", app_id);
  parm.put("mch_id", mch_id);
  parm.put("partner_trade_no", tradeno);
  parm.put("nonce_str", payutil.getnoncestr());
  parm.put("sign", payutil.getsign(parm, api_secret));
 
  string restxml = httputils.posts(transfers_pay_query, xmlutil.xmlformat(parm, true));
  restmap = xmlutil.xmlparse(restxml);
 } catch (exception e) {
  log.error(e.getmessage(), e);
 }
 
 if (collectionutil.isnotempty(restmap) && "success".equals(restmap.get("result_code"))) {
  // 訂單查詢成功 處理業務邏輯
  log.info("訂單查詢:訂單" + restmap.get("partner_trade_no") + "支付成功");
  map<string, string> transfermap = new hashmap<>();
  transfermap.put("partner_trade_no", restmap.get("partner_trade_no"));//商戶轉賬訂單號
  transfermap.put("openid", restmap.get("openid")); //收款微信號
  transfermap.put("payment_amount", restmap.get("payment_amount")); //轉賬金額
  transfermap.put("transfer_time", restmap.get("transfer_time")); //轉賬時間
  transfermap.put("desc", restmap.get("desc")); //轉賬描述
  webutil.response(response, webutil.packjsonp(callback, json
   .tojsonstring(new jsonresult(1, "訂單轉賬成功", new responsedata(null, transfermap)), serializerfeatureutil.features)));
 }else {
  if (collectionutil.isnotempty(restmap)) {
  log.info("訂單轉賬失敗:" + restmap.get("err_code") + ":" + restmap.get("err_code_des"));
  }
  webutil.response(response, webutil.packjsonp(callback, json
   .tojsonstring(new jsonresult(-1, "訂單轉賬失敗", new responsedata()), serializerfeatureutil.features)));
 }
 }
 
}

其他代碼參考上一篇 微信支付-app支付服務端詳解

支付結果

支付成功后會將金額支付到用戶余額中

java實現微信企業付款到個人

功能實際很簡單,需要自己看一下文檔。

源代碼地址:微信企業付款

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/fengshizty/article/details/53204566

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品在线播放 | 色老板在线视频观看 | 无码中文字幕av免费放 | 魔兽官方小说 | 亚洲AV无码专区国产乱码网站 | 无码射肉在线播放视频 | haodiaose在线精品免费观看 | 欧美不卡一区二区三区 | 亚洲人成在线播放 | 久久精品亚洲牛牛影视 | 亚洲精品久久麻豆蜜桃 | 红楼梦黄色小说 | 欧美性色老妇人 | avtt天堂在线 | 美女和男人免费网站视频 | 男人天堂久久 | 国产盗摄wc女厕所 | 国产精品久久国产三级国电话系列 | 亚洲a图| 91在线老王精品免费播放 | 操老逼 | 国色天香视频完整版 | 视频一区在线免费观看 | ass亚洲熟妇毛茸茸pics | xxoo做爰猛烈动态 | 美女69xx | 果冻传媒在线观看的 | 四虎影视地址 | 亚洲男人天堂2023 | 天天舔天天干天天操 | 色综合视频在线 | 好爽轻点太大了太深了 | 成人免费毛片一区二区三区 | 男生操男生 | 欧美一级级a在线观看 | 国产欧美成人不卡视频 | 韩国最新理论片奇忧影院 | yy111111免费观看 | 视频一区二区三区在线 | 色噜噜狠狠狠综合曰曰曰88av | 美女扒开腿让男人桶爽动态图片 |