Skip to content

Commit 23ece0a

Browse files
committed
新增异常退款、查询下载电子发票接口
1 parent 0696631 commit 23ece0a

File tree

6 files changed

+116
-21
lines changed

6 files changed

+116
-21
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Changelog
22

3+
## [1.2.40] - 2023-08-31
4+
5+
### Added
6+
7+
- 检查子商户开票功能状态
8+
- 获取发票下载信息
9+
- 下载发票文件
10+
- 发起异常退款
11+
312
## [1.2.39] - 2023-05-16
413

514
### Fixed

README.md

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ Native 支付调试最简单便捷,调试通过没有问题证明初始化参
154154
| 公用| 公用 | 调起支付签名| sign |||
155155
| 公用| 公用 | 回调通知| callback |||
156156
| 公用| 公用 | 敏感信息参数解密 | decrypt |||
157-
| 公用| 公用 | 下载账单| download_bill|||
157+
| 公用| 公用 | 下载(交易、资金)账单| download_bill|||
158158
| 商户进件 | 特约商户进件、小微商户进件| 提交申请单 | applyment_submit |||
159159
| 商户进件 | 特约商户进件、小微商户进件| 查询申请单状态| applyment_query|||
160160
| 商户进件 | 特约商户进件、小微商户进件| 修改结算账号| applyment_settlement_modify|||
@@ -165,8 +165,9 @@ Native 支付调试最简单便捷,调试通过没有问题证明初始化参
165165
| 基础支付 | 合单支付 | 统一下单 | combine_pay|||
166166
| 基础支付 | 合单支付 | 查询订单 | combine_query|||
167167
| 基础支付 | 合单支付 | 关闭订单 | combine_close|||
168-
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 申请退款 | refund|||
169-
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 查询单笔退款| query_refund |||
168+
| 基础支付 | 退款 | 申请退款 | refund|||
169+
| 基础支付 | 退款 | 查询单笔退款| query_refund |||
170+
| 基础支付 | 退款 | 发起异常退款| abnormal_refund |||
170171
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 申请交易账单| trade_bill |||
171172
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 申请资金账单| fundflow_bill|||
172173
| 基础支付 | JSAPI、APP、H5、Native、小程序、合单支付 | 申请单个子商户资金账单 | submch_fundflow_bill|||
@@ -300,18 +301,21 @@ Native 支付调试最简单便捷,调试通过没有问题证明初始化参
300301
| 风险合规 | 商户违规通知回调 | 删除商户违规通知回调地址 | merchantrisk_callback_delete |||
301302
| 其他能力 | 图片上传 | 图片上传 | image_upload |||
302303
| 其他能力 | 视频上传 | 视频上传 | video_upload |||
303-
| 其他 | 电子发票(公共API) | 创建电子发票卡券模板 | fapiao_card_template |||
304-
| 其他 | 电子发票(公共API) | 配置开发选项 | fapiao_set_merchant_config |||
305-
| 其他 | 电子发票(公共API) | 查询商户配置的开发选项 | fapiao_merchant_config |||
306-
| 其他 | 电子发票(公共API) | 获取抬头填写链接 | fapiao_title_url |||
307-
| 其他 | 电子发票(公共API) | 获取用户填写的抬头 | fapiao_title |||
308-
| 其他 | 电子发票(区块链模式) | 获取商品和服务税收分类对照表 | fapiao_tax_codes |||
309-
| 其他 | 电子发票(区块链模式) | 获取商户开票基础信息 | fapiao_merchant_base_info |||
310-
| 其他 | 电子发票(区块链模式) | 开具电子发票 | fapiao_applications |||
311-
| 其他 | 电子发票(区块链模式) | 查询电子发票 | fapiao_query |||
312-
| 其他 | 电子发票(区块链模式) | 冲红电子发票 | fapiao_reverse |||
313-
| 其他 | 电子发票(自建平台模式) | 上传电子发票文件 | fapiao_upload_file |||
314-
| 其他 | 电子发票(自建平台模式) | 将电子发票插入微信用户卡包 | fapiao_insert_cards |||
304+
| 其他 | 电子发票 | 创建电子发票卡券模板 | fapiao_card_template |||
305+
| 其他 | 电子发票 | 配置开发选项 | fapiao_set_merchant_config |||
306+
| 其他 | 电子发票 | 查询商户配置的开发选项 | fapiao_merchant_config |||
307+
| 其他 | 电子发票 | 获取抬头填写链接 | fapiao_title_url |||
308+
| 其他 | 电子发票 | 获取用户填写的抬头 | fapiao_title |||
309+
| 其他 | 电子发票 | 获取商品和服务税收分类对照表 | fapiao_tax_codes |||
310+
| 其他 | 电子发票 | 获取商户开票基础信息 | fapiao_merchant_base_info |||
311+
| 其他 | 电子发票 | 开具电子发票 | fapiao_applications |||
312+
| 其他 | 电子发票 | 查询电子发票 | fapiao_query |||
313+
| 其他 | 电子发票 | 冲红电子发票 | fapiao_reverse |||
314+
| 其他 | 电子发票 | 上传电子发票文件 | fapiao_upload_file |||
315+
| 其他 | 电子发票 | 将电子发票插入微信用户卡包 | fapiao_insert_cards |||
316+
| 其他 | 电子发票 | 检查子商户开票功能状态 | fapiao_check_submch |||
317+
| 其他 | 电子发票 | 获取发票下载信息 | fapiao_query_files |||
318+
| 其他 | 电子发票 | 下载发票文件 | fapiao_download_file |||
315319
| 其他 | 银行组件 | 获取对私银行卡号开户银行 | capital_search_bank_number |||
316320
| 其他 | 银行组件 | 查询支持个人业务的银行列表 | capital_personal_banks |||
317321
| 其他 | 银行组件 | 查询支持对公业务的银行列表 | capital_corporate_banks |||

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
setup(
88
name="wechatpayv3",
9-
version="1.2.39",
9+
version="1.2.40",
1010
author="minibear",
1111
description="微信支付 API v3 Python SDK(python sdk for wechatpay v3)",
1212
long_description=long_description,

wechatpayv3/__init__.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,10 @@ def decrypt(self, ciphtext):
9090
complaint_notification_update, complaint_response,
9191
complaint_update_refund)
9292
from .fapiao import (fapiao_applications, fapiao_card_template,
93+
fapiao_check_submch, fapiao_download_file,
9394
fapiao_insert_cards, fapiao_merchant_base_info,
94-
fapiao_merchant_config, fapiao_query, fapiao_reverse,
95+
fapiao_merchant_config, fapiao_query,
96+
fapiao_query_files, fapiao_reverse,
9597
fapiao_set_merchant_config, fapiao_tax_codes,
9698
fapiao_title, fapiao_title_url, fapiao_upload_file)
9799
from .goldplan import (goldplan_advertising_close,
@@ -173,10 +175,10 @@ def decrypt(self, ciphtext):
173175
profitsharing_unfreeze)
174176
from .smartguide import (guides_assign, guides_query, guides_register,
175177
guides_update)
176-
from .transaction import (close, combine_close, combine_pay, combine_query,
177-
download_bill, fundflow_bill, pay, query,
178-
query_refund, refund, submch_fundflow_bill,
179-
trade_bill)
178+
from .transaction import (abnormal_refund, close, combine_close,
179+
combine_pay, combine_query, download_bill,
180+
fundflow_bill, pay, query, query_refund, refund,
181+
submch_fundflow_bill, trade_bill)
180182
from .transfer import (transfer_batch, transfer_bill_receipt,
181183
transfer_detail_receipt, transfer_query_batchid,
182184
transfer_query_bill_receipt,

wechatpayv3/fapiao.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,3 +232,48 @@ def fapiao_insert_cards(self, fapiao_apply_id, buyer_information, fapiao_card_in
232232
raise Exception('fapiao_card_information is not assigned.')
233233
params.update({'scene': scene})
234234
return self._core.request(path, method=RequestType.POST, data=params)
235+
236+
237+
def fapiao_check_submch(self, sub_mchid):
238+
"""检查子商户开票功能状态
239+
:param sub_mch: 子商户号,微信支付分配的子商户号。示例值:'1900000001'
240+
"""
241+
if sub_mchid:
242+
path = '/v3/new-tax-control-fapiao/merchant/%s/check' % sub_mchid
243+
else:
244+
raise Exception('sub_mchid is not assigned.')
245+
return self._core.request(path)
246+
247+
248+
def fapiao_query_files(self, fapiao_apply_id, sub_mchid=None, fapiao_id=None):
249+
"""获取发票下载信息
250+
:param fapiao_apply_id: 发票申请单号,开票时指定的发票申请单号。
251+
:param sub_mchid: 子商户号,微信支付分配的子商户号。示例值:'1900000001'
252+
:param fapiao_id: 商户发票单号,开票时指定的商户发票单号,唯一标识一张电子发票。
253+
"""
254+
if fapiao_apply_id:
255+
path = '/v3/new-tax-control-fapiao/fapiao-applications/%s/fapiao-files' % fapiao_apply_id
256+
else:
257+
raise Exception('fapiao_apply_id is not assigned.')
258+
params = {}
259+
if sub_mchid:
260+
params.update({'sub_mchid': sub_mchid})
261+
if fapiao_id:
262+
params.update({'fapiao_id': fapiao_id})
263+
return self._core.request(path, method=RequestType.POST, data=params)
264+
265+
266+
def fapiao_download_file(self, url, openid, invoice_code, invoice_no, fapiao_id, sub_mchid=None):
267+
"""下载发票文件
268+
:param url: 获取发票下载信息接口返回的download_url,保留其中的token字段不要删除。
269+
"""
270+
if not (url and openid and invoice_code and invoice_no and fapiao_id):
271+
raise Exception('url, openid, invoice_code, invocide_no or fapiao_id is not assigned.')
272+
else:
273+
path = '%s&mchid=%s&openid=%s&invoice_code=%s&invoice_no=%s&fapiao_id=%s' % (url, self._mchid, openid, invoice_code, invoice_no, fapiao_id)
274+
if self._partner_mode:
275+
if sub_mchid:
276+
path = '%s&sub_mchid=%s' % (path, sub_mchid)
277+
else:
278+
raise Exception('sub_mchid is not assigned.')
279+
return self._core.request(path)

wechatpayv3/transaction.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,3 +389,38 @@ def combine_close(self, combine_out_trade_no, sub_orders, combine_appid=None):
389389
params.update({'sub_orders': sub_orders})
390390
path = '/v3/combine-transactions/out-trade-no/%s/close' % combine_out_trade_no
391391
return self._core.request(path, method=RequestType.POST, data=params)
392+
393+
394+
def abnormal_refund(self, refund_id, out_refund_no, type, bank_type=None, bank_account=None, real_name=None, sub_mchid=None):
395+
"""发起异常退款
396+
:param refund_id: 微信退款单号,退款单的主键,唯一定义此资源的标识。
397+
:param out_refund_no: 商户退款单号,商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
398+
:param type: 异常退款处理方式,可选值:'COUPON', 'DISCOUNT'。
399+
:param bank_type: 开户银行类型,采用字符串类型的银行标识,值列表详见官网银行类型。
400+
:param bank_account: 收款银行卡号,用户的银行卡账号。
401+
:param real_name: 收款用户姓名。
402+
"""
403+
if refund_id:
404+
path = '/v3/refund/domestic/refunds/%s/apply-abnormal-refund' % refund_id
405+
else:
406+
raise Exception('refund_id is not assigned.')
407+
params = {}
408+
if self._partner_mode:
409+
if sub_mchid:
410+
params.update({'sub_mchid': sub_mchid})
411+
else:
412+
raise Exception('sub_mchid is not assigned.')
413+
if not (out_refund_no and type):
414+
raise Exception('out_refund_no or type is not assigned.')
415+
params.update({'out_refund_no': out_refund_no})
416+
params.update({'type': type})
417+
if bank_type:
418+
params.update({'bank_type': bank_type})
419+
cipher_data = False
420+
if bank_account:
421+
params.update({'bank_account': self._core.encrypt(bank_account)})
422+
cipher_data = True
423+
if real_name:
424+
params.update({'real_name': self._core.encrypt(real_name)})
425+
cipher_data = True
426+
return self._core.request(path, method=RequestType.POST, data=params, cipher_data=cipher_data)

0 commit comments

Comments
 (0)