Module: WechatPay::Ecommerce
- Includes:
- WechatPayHelper
- Defined in:
- lib/wechat-pay/ecommerce.rb,
lib/wechat-pay/ecommerce/bill.rb,
lib/wechat-pay/ecommerce/order.rb,
lib/wechat-pay/ecommerce/refund.rb,
lib/wechat-pay/ecommerce/balance.rb,
lib/wechat-pay/ecommerce/withdraw.rb,
lib/wechat-pay/ecommerce/applyment.rb,
lib/wechat-pay/ecommerce/subsidies.rb,
lib/wechat-pay/ecommerce/combine_order.rb,
lib/wechat-pay/ecommerce/profitsharing.rb
Overview
# 服务商相关接口封装(电商平台,服务商有许多接口共用) 文档: pay.weixin.qq.com/wiki/doc/apiv3_partner/open/pay/chapter3_3_3.shtml
PS: 电商收付通的所有接口已经封装完毕,有需要再补充。
Constant Summary collapse
- TRADEBILL_FIELDS =
:nodoc:
[:bill_date].freeze
- FUNDFLOWBILL_FIELDS =
:nodoc:
[:bill_date].freeze
- ECOMMERCE_FUNDFLOWBILL_FIELDS =
:nodoc:
%i[bill_date account_type algorithm].freeze
- QUERY_ORDER_FIELDS =
:nodoc:
%i[sub_mchid out_trade_no transaction_id].freeze
- CLOSE_ORDER_FIELDS =
:nodoc:
%i[sub_mchid out_trade_no].freeze
- INVOKE_REFUND_FIELDS =
:nodoc:
%i[sub_mchid out_trade_no total refund out_refund_no].freeze
- QUERY_REFUND_FIELDS =
:nodoc:
%i[sub_mchid refund_id out_refund_no].freeze
- RETURN_ADVANCE_REFUND_FIELDS =
:nodoc:
%i[refund_id sub_mchid].freeze
- QUERY_RETURN_ADVANCE_REFUND_FIELDS =
:nodoc:
%i[sub_mchid refund_id].freeze
- QUERY_REALTIME_BALANCE_FIELDS =
:nodoc:
[:sub_mchid].freeze
- QUERY_ENDDAY_BALANCE_FIELDS =
:nodoc:
%i[sub_mchid date].freeze
- QUERY_PLATFORM_REALTIME_BALANCE_FIELDS =
:nodoc:
%i[account_type].freeze
- QUERY_PLATFORM_ENDDAY_BALANCE_FIELDS =
:nodoc:
%i[account_type date].freeze
- WITHDRAW_FIELDS =
:nodoc:
%i[sub_mchid out_request_no amount].freeze
- QUERY_WITHDRAW_FIELDS =
:nodoc:
%i[withdraw_id out_request_no sub_mchid].freeze
- PLATFORM_WITHDRAW_FIELDS =
:nodoc:
%i[out_request_no amount account_type].freeze
- QUERY_PLATFORM_WITHDRAW_FIELDS =
:nodoc:
%i[withdraw_id out_request_no].freeze
- DOWNLOAD_EXCEPTION_WITHDRAW_FILE =
:nodoc:
%i[bill_type bill_date].freeze
- QUERY_APPLYMENT_FIELDS =
:nodoc:
%i[applyment_id out_request_no].freeze
- INVOKE_QUERY_SETTLEMENT_FIELDS =
:nodoc:
[:sub_mchid].freeze
- INVOKE_MODIFY_SETTLEMENT_FIELDS =
:nodoc:
%i[sub_mchid account_type account_bank bank_address_code account_number].freeze
- REQUEST_SUBSIDIES_FIELDS =
:nodoc:
%i[sub_mchid transaction_id amount description].freeze
- RETURN_SUBSIDIES_FIELDS =
:nodoc:
%i[sub_mchid transaction_id amount description out_order_no].freeze
- CANCEL_SUBSIDIES_FIELDS =
:nodoc:
%i[sub_mchid transaction_id description].freeze
- QUERY_COMBINE_ORDER_FIELDS =
:nodoc:
%i[combine_out_trade_no].freeze
- CLOSE_COMBINE_ORDER_FIELDS =
:nodoc:
%i[combine_out_trade_no sub_orders].freeze
- REQUEST_PROFITSHARING_FIELDS =
:nodoc:
%i[out_trade_no transaction_id sub_mchid out_order_no receivers finish].freeze
- QUERY_PROFITSHARING_FIELDS =
:nodoc:
%i[out_order_no transaction_id sub_mchid].freeze
- RETURN_PROFITSHARING_FIELDS =
:nodoc:
%i[sub_mchid order_id out_order_no out_return_no return_mchid amount description].freeze
- QUERY_RETURN_PROFITSHARING_FIELDS =
:nodoc:
%i[sub_mchid order_id out_order_no out_return_no].freeze
- FINISH_PROFITSHARING_FIELDS =
:nodoc:
%i[transaction_id sub_mchid out_order_no description].freeze
- QUERY_PROFITSHARING_AMOUNT_FIELDS =
:nodoc:
%i[transaction_id].freeze
- ADD_PROFITSHARING_RECEIVERS_FIELDS =
:nodoc:
%i[type account name relation_type].freeze
- DELETE_PROFITSHARING_RECEIVERS_FIELDS =
:nodoc:
%i[type account].freeze
Constants included from WechatPayHelper
Class Method Summary collapse
-
.add_profitsharing_receivers(params) ⇒ Object
添加分账接收方.
-
.applyment(payload) ⇒ Object
二级商户进件.
-
.cancel_subsidies(params) ⇒ Object
取消补差.
-
.close_combine_order(params) ⇒ Object
关闭合单.
-
.close_order(params) ⇒ Object
关闭订单.
-
.delete_profitsharing_receivers(params) ⇒ Object
删除分账接收方.
-
.download_exception_withdraw_file(params) ⇒ Object
按日下载提现异常文件.
-
.ecommerce_fundflowbill(params) ⇒ Object
二级商户资金账单.
-
.finish_profitsharing(params) ⇒ Object
完结分账.
-
.fundflowbill(params) ⇒ Object
申请资金账单.
-
.get_certificates ⇒ Object
证书获取.
-
.invoke_refund(params) ⇒ Object
退款申请.
-
.media_upload(image) ⇒ Object
图片上传.
-
.media_video_upload(video) ⇒ Object
视频上传.
-
.modify_settlement(params) ⇒ Object
修改结算账号.
-
.platform_withdraw(params) ⇒ Object
电商平台提现.
-
.query_applyment(params) ⇒ Object
通过商户的申请单或微信的申请单号查询.
-
.query_combine_order(params) ⇒ Object
合单查询.
-
.query_endday_balance(params) ⇒ Object
日终余额查询.
-
.query_order(params) ⇒ Object
订单查询.
-
.query_platform_endday_balance(params) ⇒ Object
平台商户日终余额.
-
.query_platform_realtime_balance(params) ⇒ Object
平台商户实时余额.
-
.query_platform_withdraw(params) ⇒ Object
商户平台提现查询.
-
.query_profitsharing(params) ⇒ Object
分账结果查询.
-
.query_profitsharing_amount(params) ⇒ Object
查询订单剩余待分金额.
-
.query_realtime_balance(params) ⇒ Object
余额实时查询.
-
.query_refund(params) ⇒ Object
退款查询.
-
.query_return_advance_refund(params) ⇒ Object
退款查询.
-
.query_return_profitsharing(params) ⇒ Object
分账回退结果查询.
-
.query_settlement(params) ⇒ Object
查询结算账户.
-
.query_withdraw(params) ⇒ Object
二级商户提现查询.
-
.request_profitsharing(params) ⇒ Object
分账请求.
-
.request_subsidies(params) ⇒ Object
请求补差.
-
.return_advance_refund(params) ⇒ Object
垫付退款回补.
-
.return_profitsharing(params) ⇒ Object
请求分账回退.
-
.return_subsidies(params) ⇒ Object
补差回退.
-
.tradebill(params) ⇒ Object
申请交易账单.
-
.withdraw(params) ⇒ Object
二级商户提现.
Instance Method Summary collapse
-
#key ⇒ Object
:singleton-method: invoke_combine_transactions_in_miniprogram.
Class Method Details
.add_profitsharing_receivers(params) ⇒ Object
添加分账接收方
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_4_7.shtml
Example:
“‘ ruby WechatPay::Ecommerce.add_profitsharing_receivers(type: ’PERSONAL_OPENID’, account: ‘oly6s5cLmmVzzr8iPyI6mJj7qG2s’, name: ‘Lan’, relation_type: ‘DISTRIBUTOR’).body “‘
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/wechat-pay/ecommerce/profitsharing.rb', line 180 def add_profitsharing_receivers(params) url = '/v3/ecommerce/profitsharing/receivers/add' method = 'POST' params = params.merge({ appid: WechatPay.app_id }) payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json ) end |
.applyment(payload) ⇒ Object
二级商户进件
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter11_1_1.shtml
Example:
“‘ ruby params = {
"organization_type": "2",
"business_license_info": {
"business_license_copy": "47ZC6GC-vnrbEg05InE4d2I6_H7I4",
"business_license_number": "123456789012345678",
"merchant_name": "腾讯科技有限公司",
"legal_person": "张三"
},
"organization_cert_info": {
"organization_copy": "47ZC6GC-vnrbEny__Ie_An5-tCpqxuGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4 ",
"organization_time": "[\"2014-01-01\",\"长期\"]",
"organization_number": "12345679-A"
},
"id_card_info": {
"id_card_copy": "jTpGmxUX3FBWVQ5NJTZvlKC-ehEuo0BJqRTvDujqhThn4ReFxikqJ5YW6zFQ",
"id_card_national": "47ZC6GC-vnrbEny__Ie_AnGprrKhpVBDIUv0OF4wFNIO4kqg05InE4d2I6_H7I4",
"id_card_name": "pVd1HJ6z7UtC + xriudjD5AqhZ9evAM + Jv1z0NVa8MRtelw / wDa4SzfeespQO / 0 kjiwfqdfg =",
"id_card_number": "UZFETyabYFFlgvGh6R4vTzDRgzvA2HtP5VHahNhSUqhR9iuGTunRPRVFg ==",
"id_card_valid_time": "2026-06-06"
},
"need_account_info": true,
"account_info": {
"bank_account_type": "74",
"account_name": "fTA4TXc8yMOwFCYeGPktOOSbOBei3KAmUWHGxCQo2hfaC7xumTqXR7 / NyRHpFKXURQFcmmw ==",
"account_bank": "工商银行",
"bank_address_code": "110000",
"bank_branch_id": "402713354941",
"bank_name": "施秉县农村信用合作联社城关信用社",
"account_number": "d+xT+MQCvrLHUVD5Fnx30mr4L8sPndjXTd75kPkyjqnoMRrEEaYQE8ZRGYoeorwC"
},
"contact_info": {
"contact_type": "65",
"contact_name": "pVd1HJ6zyvPedzGaV+Xy7UDa4SzfeespQO / 0 kjiwfqdfg ==",
"contact_id_card_number": "UZFETyabYFFlgvGh6R4vTzDEOiZZ4ka9+5RgzvA2rJx+NztYUbN209rqR9iuGTunRPRVFg ==",
"mobile_phone": "Uy5Hb0c5Se/orEbrWze/ROHu9EPAs/CigDlJ2fnyzC1ppJNBrqcBszhYQUlu5zn6o2uZpBhAsQwd3QAjw==",
"contact_email": "Uy5Hb0c5Se/orEbrWze/ROHu9EPAs/CigDlJ2fnyzC1ppJNaLZExOEzmUn6o2uZpBhAsQwd3QAjw=="
},
"sales_scene_info": {
"store_name": "爱烧烤",
"store_url": "http://www.qq.com",
"store_qr_code": "jTpGmxUX3FBWVQ5NJTZvlKX_gdU4cRz7z5NxpnFuAujqhThn4ReFxikqJ5YW6zFQ"
},
"merchant_shortname": "爱烧烤",
"out_request_no": "APPLYMENT_00000000001",
"qualifications": "[\"jTpGmxUX3FBWVQ5NJInE4d2I6_H7I4\"]",
"business_addition_pics": "[\"jTpGmg05InE4d2I6_H7I4\"]",
"business_addition_desc": "特殊情况,说明原因"
} “‘
“‘ ruby WechatPay::Ecommerce.applyment(params) “`
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/wechat-pay/ecommerce/applyment.rb', line 67 def applyment(payload) url = '/v3/ecommerce/applyments/' method = 'POST' payload_json = payload.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json, extra_headers: { 'Wechatpay-Serial' => WechatPay.platform_serial_no } ) end |
.cancel_subsidies(params) ⇒ Object
取消补差
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_3.shtml
Example:
“‘ ruby WechatPay::Ecommerce.return_subsidies(sub_mchid: ’1600000’, transaction_id: ‘4323400972202104305131070170’, amount: 1, description: ‘订单补差’, out_order_no: ‘P103333’) “‘
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/wechat-pay/ecommerce/subsidies.rb', line 70 def cancel_subsidies(params) url = '/v3/ecommerce/subsidies/cancel' method = 'POST' payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json ) end |
.close_combine_order(params) ⇒ Object
关闭合单
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml
“‘ ruby WechatPay::Ecommerce.close_combine_order(combine_out_trade_no: ’C202104302474’) “‘
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
# File 'lib/wechat-pay/ecommerce/combine_order.rb', line 223 def self.close_combine_order(params) combine_out_trade_no = params.delete(:combine_out_trade_no) url = "/v3/combine-transactions/out-trade-no/#{combine_out_trade_no}/close" payload = { combine_appid: WechatPay.app_id }.merge(params) payload_json = payload.to_json method = 'POST' make_request( method: method, for_sign: payload_json, payload: payload_json, path: url ) end |
.close_order(params) ⇒ Object
关闭订单
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_6.shtml
“‘ ruby WechatPay::Ecommerce.close_order(sub_mchid: ’16000008’, out_trade_no: ‘N3344445’) “‘
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/wechat-pay/ecommerce/order.rb', line 166 def self.close_order(params) out_trade_no = params.delete(:out_trade_no) url = "/v3/pay/partner/transactions/out-trade-no/#{out_trade_no}/close" params = params.merge({ sp_mchid: WechatPay.mch_id }) method = 'POST' make_request( method: method, path: url, for_sign: params.to_json, payload: params.to_json ) end |
.delete_profitsharing_receivers(params) ⇒ Object
删除分账接收方
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_4_8.shtml
Example:
“‘ ruby WechatPay::Ecommerce.remove_profitsharing_receivers(type: ’PERSONAL_OPENID’, account: ‘oly6s5cLmmVzzr8iPyI6mJj7qG2s’, name: ‘Lan’, relation_type: ‘DISTRIBUTOR’).body “‘
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/wechat-pay/ecommerce/profitsharing.rb', line 210 def delete_profitsharing_receivers(params) url = '/v3/ecommerce/profitsharing/receivers/delete' method = 'POST' params = params.merge({ appid: WechatPay.app_id }) payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json ) end |
.download_exception_withdraw_file(params) ⇒ Object
按日下载提现异常文件
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_8_4.shtml
“‘ ruby WechatPay::Ecommerce.download_exception_withdraw_file(bill_type: ’NO_SUCC’, bill_date: ‘2021-05-10’) “‘
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/wechat-pay/ecommerce/withdraw.rb', line 136 def download_exception_withdraw_file(params) bill_type = params.delete(:bill_type) path = "/v3/merchant/fund/withdraw/bill-type/#{bill_type}" method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.ecommerce_fundflowbill(params) ⇒ Object
二级商户资金账单
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_9_5.shtml
Example:
“‘ ruby WechatPay::Ecommerce.ecommerce_fundflowbill(bill_date: ’2021-04-30’, account_type: ‘ALL’, algorithm: ‘AEAD_AES_256_GCM’) “‘
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/wechat-pay/ecommerce/bill.rb', line 73 def ecommerce_fundflowbill(params) path = '/v3/ecommerce/bill/fundflowbill' method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.finish_profitsharing(params) ⇒ Object
完结分账
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_4_5.shtml
Example:
“‘ ruby WechatPay::Ecommerce.finish_profitsharing(sub_mchid: ’160000’, out_order_no: ‘P202104303106’, transaction_id: ‘4323400972202104305131070133’, description: ‘直接打款到二级商户不分账’).bod “‘
128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/wechat-pay/ecommerce/profitsharing.rb', line 128 def finish_profitsharing(params) url = '/v3/ecommerce/profitsharing/finish-order' method = 'POST' payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json ) end |
.fundflowbill(params) ⇒ Object
申请资金账单
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_9_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.fundflowbill(bill_date: ’2021-04-30’) “‘
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/wechat-pay/ecommerce/bill.rb', line 45 def fundflowbill(params) path = '/v3/bill/fundflowbill' method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.get_certificates ⇒ Object
证书获取
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_1_3.shtml
Example:
“‘ ruby WechatPay::Ecommerce.get_certificates “`
126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/wechat-pay/ecommerce/applyment.rb', line 126 def get_certificates url = '/v3/certificates' method = 'GET' make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.invoke_refund(params) ⇒ Object
退款申请
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_1.shtml
Example:
“‘ ruby WechatPay::Ecommerce.invoke_refund(sub_mchid: ’1600000’, transaction_id: ‘4323400972202104305131070170’, total: 1, refund: 1, description: ‘退款’, out_refund_no: ‘R10000’) # by transaction_id WechatPay::Ecommerce.invoke_refund(sub_mchid: ‘1608977559’, total: 1, refund: 1, description: ‘退款’, out_trade_no: ‘N202104302474’, out_refund_no: ‘R10000’) # by out_trade_no “‘
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/wechat-pay/ecommerce/refund.rb', line 18 def invoke_refund(params) url = '/v3/ecommerce/refunds/apply' method = 'POST' amount = { refund: params.delete(:refund), total: params.delete(:total), currency: 'CNY' } params = params.merge({ amount: amount, sp_appid: WechatPay.app_id }) make_request( path: url, method: method, for_sign: params.to_json, payload: params.to_json ) end |
.media_upload(image) ⇒ Object
图片上传
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter2_1_1.shtml
Example:
“‘ ruby WechatPay::Ecommerce.media_upload(File.open(’Your Image’)) “‘
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/wechat-pay/ecommerce.rb', line 69 def media_upload(image) url = '/v3/merchant/media/upload' method = 'POST' = { filename: image.to_path, sha256: Digest::SHA256.hexdigest(image.read) } image.rewind payload = { meta: .to_json, file: image } make_request( method: method, path: url, for_sign: .to_json, payload: payload, extra_headers: { 'Content-Type' => nil # Pass nil to remove the Content-Type } ) end |
.media_video_upload(video) ⇒ Object
视频上传
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter2_1_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.media_video_upload(File.open(’Your Video’)) “‘
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/wechat-pay/ecommerce.rb', line 35 def media_video_upload(video) url = '/v3/merchant/media/video_upload' method = 'POST' = { filename: video.to_path, sha256: Digest::SHA256.hexdigest(video.read) } video.rewind payload = { meta: .to_json, file: video } make_request( method: method, path: url, for_sign: .to_json, payload: payload, extra_headers: { 'Content-Type' => nil } ) end |
.modify_settlement(params) ⇒ Object
修改结算账号
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_1_4.shtml
Example:
“‘ ruby WechatPay::Ecommerce.modify_settlement(sub_mchid: ’15000000’, account_type: ‘ACCOUNT_TYPE_PRIVATE’, account_bank: ‘工商银行’, bank_address_code: ‘110000’, account_number: WechatPay::Sign.sign_important_info(‘755555555’)) “‘
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/wechat-pay/ecommerce/applyment.rb', line 177 def modify_settlement(params) sub_mchid = params.delete(:sub_mchid) url = "/v3/apply4sub/sub_merchants/#{sub_mchid}/modify-settlement" method = 'POST' payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json, extra_headers: { 'Wechatpay-Serial' => WechatPay.platform_serial_no } ) end |
.platform_withdraw(params) ⇒ Object
电商平台提现
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_8_5.shtml
Example:
“‘ ruby WechatPay::Ecommerce.platform_withdraw(out_request_no: ’P10000’, amount: 1, account_type: ‘BASIC’) WechatPay::Ecommerce.platform_withdraw(out_request_no: ‘P10000’, amount: 1, account_type: ‘FEES’) “‘
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/wechat-pay/ecommerce/withdraw.rb', line 80 def platform_withdraw(params) url = '/v3/merchant/fund/withdraw' method = 'POST' make_request( method: method, path: url, for_sign: params.to_json, payload: params.to_json ) end |
.query_applyment(params) ⇒ Object
通过商户的申请单或微信的申请单号查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter11_1_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_applyment(out_request_no: ’APPLYMENT_00000000005’) # by out_request_no WechatPay::Ecommerce.query_applyment(applyment_id: ‘200040444455566667’) # by_applyment_id “‘
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/wechat-pay/ecommerce/applyment.rb', line 97 def query_applyment(params) if params[:applyment_id] applyment_id = params.delete(:applyment_id) url = "/v3/ecommerce/applyments/#{applyment_id}" else out_request_no = params.delete(:out_request_no) url = "/v3/ecommerce/applyments/out-request-no/#{out_request_no}" end method = 'GET' make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_combine_order(params) ⇒ Object
合单查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml
“‘ ruby WechatPay::Ecommerce.query_order(combine_out_trade_no: ’C202104302474’) “‘
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/wechat-pay/ecommerce/combine_order.rb', line 198 def self.query_combine_order(params) combine_out_trade_no = params.delete(:combine_out_trade_no) url = "/v3/combine-transactions/out-trade-no/#{combine_out_trade_no}" method = 'GET' make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_endday_balance(params) ⇒ Object
日终余额查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_7_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_endday_balance(sub_mchid: ’1600000’, date: ‘2019-08-17’) “‘
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/wechat-pay/ecommerce/balance.rb', line 42 def query_endday_balance(params) sub_mchid = params.delete(:sub_mchid) path = "/v3/ecommerce/fund/balance/#{sub_mchid}" method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_order(params) ⇒ Object
订单查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_5.shtml
“‘ ruby WechatPay::Ecommerce.query_order(sub_mchid: ’16000008’, transaction_id: ‘4323400972202104305133344444’) # by transaction_id WechatPay::Ecommerce.query_order(sub_mchid: ‘16000008’, out_trade_no: ‘N202104302474’) # by out_trade_no “‘
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 153 154 |
# File 'lib/wechat-pay/ecommerce/order.rb', line 128 def self.query_order(params) if params[:transaction_id] params.delete(:out_trade_no) transaction_id = params.delete(:transaction_id) path = "/v3/pay/partner/transactions/id/#{transaction_id}" else params.delete(:transaction_id) out_trade_no = params.delete(:out_trade_no) path = "/v3/pay/partner/transactions/out-trade-no/#{out_trade_no}" end params = params.merge({ sp_mchid: WechatPay.mch_id }) method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_platform_endday_balance(params) ⇒ Object
平台商户日终余额
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_7_4.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_platform_endday_balance(account_type: ’BASIC’) WechatPay::Ecommerce.query_platform_endday_balance(account_type: ‘FEES’) “‘
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/wechat-pay/ecommerce/balance.rb', line 98 def query_platform_endday_balance(params) account_type = params.delete(:account_type) path = "/v3/merchant/fund/dayendbalance/#{account_type}" method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_platform_realtime_balance(params) ⇒ Object
平台商户实时余额
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_7_3.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_platform_realtime_balance(account_type: ’BASIC’) # basic account WechatPay::Ecommerce.query_platform_realtime_balance(account_type: ‘FEES’) # fees account “‘
71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/wechat-pay/ecommerce/balance.rb', line 71 def query_platform_realtime_balance(params) account_type = params.delete(:account_type) url = "/v3/merchant/fund/balance/#{account_type}" method = 'GET' make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_platform_withdraw(params) ⇒ Object
商户平台提现查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_8_6.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_platform_withdraw(out_request_no: ’P1000’) WechatPay::Ecommerce.query_platform_withdraw(withdraw_id: ‘12313153’) “‘
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/wechat-pay/ecommerce/withdraw.rb', line 105 def query_platform_withdraw(params) if params[:withdraw_id] params.delete(:out_request_no) withdraw_id = params.delete(:withdraw_id) url = "/v3/merchant/fund/withdraw/withdraw-id/#{withdraw_id}" else params.delete(:withdraw_id) out_request_no = params.delete(:out_request_no) url = "/v3/merchant/fund/withdraw/out-request-no/#{out_request_no}" end method = 'GET' make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_profitsharing(params) ⇒ Object
分账结果查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_4_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_profitsharing(out_order_no: ’N202104288345’, sub_mchid: ‘16000000’, transaction_id: ‘4200001048202104280183691118’) “‘
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/wechat-pay/ecommerce/profitsharing.rb', line 50 def query_profitsharing(params) method = 'GET' query = build_query(params) path = '/v3/ecommerce/profitsharing/orders' url = "#{path}?#{query}" make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_profitsharing_amount(params) ⇒ Object
查询订单剩余待分金额
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_4_9.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_profitsharing_amount({ transaction_id: ’4323400972202104301286330188’ }) “‘
154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/wechat-pay/ecommerce/profitsharing.rb', line 154 def query_profitsharing_amount(params) method = 'GET' transaction_id = params.delete(:transaction_id) url = "/v3/ecommerce/profitsharing/orders/#{transaction_id}/amounts" make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_realtime_balance(params) ⇒ Object
余额实时查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_7_1.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_realtime_balance(sub_mchid: ’1600000’) “‘
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/wechat-pay/ecommerce/balance.rb', line 17 def query_realtime_balance(params) sub_mchid = params.delete(:sub_mchid) url = "/v3/ecommerce/fund/balance/#{sub_mchid}" method = 'GET' make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_refund(params) ⇒ Object
退款查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_refund(sub_mchid: ’16000000’, out_refund_no: ‘N202104302474’) # 注意这里的out_refund_no用的是商户订单号,微信文档有误 WechatPay::Ecommerce.query_refund(sub_mchid: ‘16000000’, refund_id: ‘420000103020210508005624628’) # 注意这里的refund_id用的是微信交易单号transaction_id,微信文档有误 “‘
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 |
# File 'lib/wechat-pay/ecommerce/refund.rb', line 53 def query_refund(params) if params[:refund_id] params.delete(:out_refund_no) refund_id = params.delete(:refund_id) path = "/v3/pay/partner/transactions/id/#{refund_id}" else params.delete(:refund_id) out_refund_no = params.delete(:out_refund_no) path = "/v3/pay/partner/transactions/out-trade-no/#{out_refund_no}" end params = params.merge({ sp_mchid: WechatPay.mch_id }) method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_return_advance_refund(params) ⇒ Object
退款查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_refund(sub_mchid: ’16000000’, out_refund_no: ‘N202104302474’) # 注意这里的out_refund_no用的是商户订单号,微信文档有误 WechatPay::Ecommerce.query_refund(sub_mchid: ‘16000000’, refund_id: ‘420000103020210508005624628’) # 注意这里的refund_id用的是微信交易单号transaction_id,微信文档有误 “‘
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/wechat-pay/ecommerce/refund.rb', line 119 def query_return_advance_refund(params) refund_id = params.delete(:refund_id) path = "/v3/ecommerce/refunds/#{refund_id}/return-advance" method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_return_profitsharing(params) ⇒ Object
分账回退结果查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_4_4.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_return_profitsharing(sub_mchid: ’1608747309’, out_order_no: ‘P202104306585’, out_return_no: ‘R202105023455’) WechatPay::Ecommerce.query_return_profitsharing(sub_mchid: ‘1608747309’, order_id: ‘3008450740201411110007820472’, out_return_no: ‘R202105023455’) “‘
101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/wechat-pay/ecommerce/profitsharing.rb', line 101 def query_return_profitsharing(params) method = 'GET' query = build_query(params) path = '/v3/ecommerce/profitsharing/returnorders' url = "#{path}?#{query}" make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_settlement(params) ⇒ Object
查询结算账户
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_1_5.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_settlement(sub_mchid: ’16000000’) “‘
151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/wechat-pay/ecommerce/applyment.rb', line 151 def query_settlement(params) sub_mchid = params.delete(:sub_mchid) url = "/v3/apply4sub/sub_merchants/#{sub_mchid}/settlement" method = 'GET' make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.query_withdraw(params) ⇒ Object
二级商户提现查询
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_8_3.shtml
Example:
“‘ ruby WechatPay::Ecommerce.query_withdraw(withdraw_id: ’335556’, sub_mchid: ‘160000’) WechatPay::Ecommerce.query_withdraw(out_request_no: ‘P1000’, sub_mchid: ‘160000’) “‘
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/wechat-pay/ecommerce/withdraw.rb', line 43 def query_withdraw(params) if params[:withdraw_id] params.delete(:out_request_no) withdraw_id = params.delete(:withdraw_id) path = "/v3/ecommerce/fund/withdraw/#{withdraw_id}" else params.delete(:withdraw_id) out_request_no = params.delete(:out_request_no) path = "/v3/ecommerce/fund/withdraw/out-request-no/#{out_request_no}" end method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( method: method, path: url, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.request_profitsharing(params) ⇒ Object
分账请求
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_4_1.shtml
Example:
“‘ ruby params = “transaction_id”=>“4323400972202104301286330188”, “sub_mchid”=>“160000”, “out_order_no”=>“N202104307987”, “finish”=>true, “receivers”=>[{“type”=>“MERCHANT_ID”, “receiver_account”=>“1607189890”, “amount”=>1, “description”=>“平台抽成”, “receiver_name”=>“CXOO5SF5sylMhSWjUBHQ6dBN0BTdrGExiziO8OEnJEG/nAa7gw6JTbsFQVhUbXD2er07Gcvt7qsLg7wYEe6iqNKbHHRWvChVVKWcKSyvfMOcRa95lxUkVn2+YdMmQ/Rt2h+xN7HMFMVPh9Py2c3sxnv1hZSraTEBWp577NOVwfSKiDTOAnbLtVtLbJndZ2N/bRXzW/gpbQV6TnnsrKPJ+NQ64kCedaYoO0XvEK1JavJju4kUAw/TnJ78jBMwj0gx2kfrsAgtwGrIGhrqhGcGHwwwPPDk5lS/iVaKpSdMvxOHN/9mrAqgqmvBg9uHRKE4sUqkZWuaiAFvYF9/5sLgjQ==”]} WechatPay::Ecommerce.request_profitsharing(params) “`
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/wechat-pay/ecommerce/profitsharing.rb', line 18 def request_profitsharing(params) url = '/v3/ecommerce/profitsharing/orders' method = 'POST' params = params.merge({ appid: WechatPay.app_id }) payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json, extra_headers: { 'Wechatpay-Serial' => WechatPay.platform_serial_no } ) end |
.request_subsidies(params) ⇒ Object
请求补差
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_1.shtml
Example:
“‘ ruby WechatPay::Ecommerce.request_subsidies(sub_mchid: ’16000000’, transaction_id: ‘4323400972202104305131070170’, amount: 1, description: ‘订单补差’) “‘
18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/wechat-pay/ecommerce/subsidies.rb', line 18 def request_subsidies(params) url = '/v3/ecommerce/subsidies/create' method = 'POST' payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json ) end |
.return_advance_refund(params) ⇒ Object
垫付退款回补
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_4.shtml
Example:
“‘ ruby WechatPay::Ecommerce.return_advance_refund(refund_id: ’50300908092021043008398036516’, sub_mchid: ‘160000’) “‘
93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/wechat-pay/ecommerce/refund.rb', line 93 def return_advance_refund(params) refund_id = params.delete(:refund_id) url = "/v3/ecommerce/refunds/#{refund_id}/return-advance" method = 'POST' make_request( path: url, method: method, for_sign: params.to_json, payload: params.to_json ) end |
.return_profitsharing(params) ⇒ Object
请求分账回退
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_4_3.shtml
“‘ ruby WechatPay::Ecommerce.return_profitsharing(out_order_no: ’P202104306585’, sub_mchid: ‘16000000’, out_return_no: ‘R20210430223’, return_mchid: ‘180000’, amount: 1, description: ‘分账回退’) WechatPay::Ecommerce.return_profitsharing(order_id: ‘3008450740201411110007820472’, sub_mchid: ‘16000000’, out_return_no: ‘R20210430223’, return_mchid: ‘180000’, amount: 1, description: ‘分账回退’) “‘
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/wechat-pay/ecommerce/profitsharing.rb', line 75 def return_profitsharing(params) url = '/v3/ecommerce/profitsharing/returnorders' method = 'POST' payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json ) end |
.return_subsidies(params) ⇒ Object
补差回退
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.return_subsidies(sub_mchid: ’16000000’, transaction_id: ‘4323400972202104305131070170’, amount: 1, description: ‘订单补差’, out_order_no: ‘P103333’) “‘
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/wechat-pay/ecommerce/subsidies.rb', line 44 def return_subsidies(params) url = '/v3/ecommerce/subsidies/return' method = 'POST' payload_json = params.to_json make_request( method: method, path: url, for_sign: payload_json, payload: payload_json ) end |
.tradebill(params) ⇒ Object
申请交易账单
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_9_1.shtml
Example:
“‘ ruby WechatPay::Ecommerce.tradebill(bill_date: ’2021-04-30’) “‘
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/wechat-pay/ecommerce/bill.rb', line 17 def tradebill(params) path = '/v3/bill/tradebill' method = 'GET' query = build_query(params) url = "#{path}?#{query}" make_request( path: url, method: method, extra_headers: { 'Content-Type' => 'application/x-www-form-urlencoded' } ) end |
.withdraw(params) ⇒ Object
二级商户提现
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_8_2.shtml
Example:
“‘ ruby WechatPay::Ecommerce.withdraw(sub_mchid: ’160000’, out_request_no: ‘P10000’, amount: 1) “‘
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/wechat-pay/ecommerce/withdraw.rb', line 18 def withdraw(params) url = '/v3/ecommerce/fund/withdraw' method = 'POST' make_request( method: method, path: url, for_sign: params.to_json, payload: params.to_json ) end |
Instance Method Details
#key ⇒ Object
:singleton-method: invoke_combine_transactions_in_miniprogram
小程序合单
Document: pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_4.shtml
Example:
“‘ ruby params = {
combine_out_trade_no: 'combine_out_trade_no',
combine_payer_info: {
openid: 'client open id'
},
sub_orders: [
{
mchid: 'mchid',
sub_mchid: 'sub mchid',
attach: 'attach',
amount: {
total_amount: 100,
currency: 'CNY'
},
out_trade_no: 'out_trade_no',
description: 'description'
}
],
notify_url: 'the_url'
}
WechatPay::Ecommerce.invoke_combine_transactions_in_miniprogram(params) “‘
104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/wechat-pay/ecommerce/order.rb', line 104 { js: 'jsapi', app: 'app', h5: 'h5', miniprogram: 'jsapi' }.each do |key, value| const_set("INVOKE_TRANSACTIONS_IN_#{key.upcase}_FIELDS", %i[sub_mchid description out_trade_no notify_url amount].freeze) define_singleton_method("invoke_transactions_in_#{key}") do |params| transactions_method_by_suffix(value, params) end end |