微信企業付款到個人的php實現代碼,供大家參考,具體內容如下
企業付款實現企業向個人付款,實現付款到用戶零錢。項目實現了企業付款到個人和企業付款個人賬單查詢。代碼包括簽名實現,雙向證書驗證,付款功能等
支付流程
付款功能
企業付款到授權用戶的零錢
企業付款注意注意:
1、所有接口需要雙向證書驗證
2、需要設置接口秘鑰,簽名用
詳細參考:微信企業付款開發文檔
項目結構
和上一篇一樣,需要配置證書以及商戶id、appid等
支付功能
包含企業轉賬和企業轉賬查詢
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支付服務端詳解
支付結果
支付成功后會將金額支付到用戶余額中
功能實際很簡單,需要自己看一下文檔。
源代碼地址:微信企業付款
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/fengshizty/article/details/53204566