From 29ae53e593a384d74976df765e1a4f87352eafcd Mon Sep 17 00:00:00 2001 From: db_huang <18006480240@163.com> Date: Sat, 31 Oct 2026 17:11:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BD=A3=E9=87=91=E6=8A=A5?= =?UTF-8?q?=E9=85=AC=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/.env.example | 1 + .../alipay_provider.cpython-313.pyc | Bin 22111 -> 22201 bytes .../app/__pycache__/config.cpython-313.pyc | Bin 8019 -> 8214 bytes backend/app/alipay_provider.py | 15 ++++++++------- backend/app/config.py | 1 + ...ipay_provider.cpython-313-pytest-9.1.1.pyc | Bin 26164 -> 26199 bytes backend/tests/test_alipay_provider.py | 8 +++----- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/backend/.env.example b/backend/.env.example index fa424f2..0d2eeee 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -53,4 +53,5 @@ ALIPAY_NOTIFY_URL=https://your-domain.example.com/alipay_callback ALIPAY_TRANSFER_API=alipay.fund.trans.uni.transfer ALIPAY_TRANSFER_QUERY_API=alipay.fund.trans.common.query ALIPAY_TRANSFER_SCENE_NAME=佣金报酬 +ALIPAY_TRANSFER_JOB_TYPE=问答任务参与者 ALIPAY_HTTP_TIMEOUT_SECONDS=30 diff --git a/backend/app/__pycache__/alipay_provider.cpython-313.pyc b/backend/app/__pycache__/alipay_provider.cpython-313.pyc index e7034d2690dd9413966280635552e5be57099c12..a900da41f7a30c8174bc3b01d51ce19bfacc30ee 100644 GIT binary patch delta 3378 zcmZuz3v83u75=XuzhgU2>^SeIgOfN83C@E+69S3ze&LchE+Nk3Imm>loUi}`Tp!yn=-#`tPkl;hMn6KZ58&TWQ+$?2Ki z3moSzTvCn^TyGKcY1Adg%tCT^A>341pf*mErf^$hivRP$C1_zbELkYsWic(6Joc$< z;WGGMoO$i?M<&H&e&V(*Stw&%X7Sj^LiFWXHR!;M+KhdD*`)=E+aCe%Du< z+LE6fi`SVFP0UtKVCfO$Arj(7IBO~#QvV`DOt*J;Y_f0h^!3^u&eoP*Pv?`3p1v)c zA}clBgk-{`_UBB=8w`wlr#$S`goF`4^=uy-@`R_xBT4atgcQS=u1wR(B28mI;U2uE z+vd2Yv&^PnwRT>zcFx6j-Pftiny=*QME-${Q7@JrF8nHiOG-KHdddCr&}BpZRfFY{ z!E)7L{U(u9C*0?l(t?~*#^2|d&DY5hM?xh@u3@wg&(=66FYD0r=T`F_diYu5OyPRQ zqnIjM&)`jtVv?v4VOb)iTlpb4mTB4wN+`^e_foM!6*|OQR_Ms zBCLz_8Q00Rn{eKX;DlqT2lD!mL}Thgh(kaR^eKdXXidu}n_*j8j{duA(E&J`=G1RM zErfRV6VeC_7@vrgr;o@AwljvvvkM#W1_e2rEQQp-CKSORc_(w8WIqv`M^~?AQ>&c% zkh>G!&Cb-=kwgeZZe`cX$P{Gd*~l*F${W@0MA;O=E_gpLP1A%V!Vlq2-XSs_p(b|! z4!{ffX8nGYO(PsYD26lnrJ6=05%x#!=f6wH58&74{AT=mQBD0`pC{~}4Aa$YZdK5w z9Egf>Z+IJRVeH2eUdvb%;RqNDe#D~&Eso3-u(*E;Vo^_dfN^#iLStc**ECK8-}i?7 zrcwVCeI7NH46HJ`oBd-;j1CL*S#Vo=_8df^6g5Ud4_ML|px$AGEeN=~R+SVrEk*`<6g8nSx`W-1U4Ea)@9@%5Kc)LnI>10sF)*d#fr=fe z8k8X%kJyVpR-_g&vX5Gji^YeQAgqL2%|Tq)o85JWbnx zq;wj~;g#|ZvKziEFRhBfX&Z9zTF?#z3{;FC4hH<8uxB{v6$HBY zLH!jglxLarRAf)Ztega(wAx4Z!i&{rUfRDc@J@9L891`Wto)FvU4h~?UyuRlab!eF z*ETEC_M&HnFEAXo%0=0#^62KZz>n8C$T#rGy3JYVnFjp;;eCWZBb;N0BrpEO8>w>ud(&)bs#A6_h zT+S7@f>}EgYe-1v#zP^E-by&hXThWT1X2kVxyC$Qa7pG~8`Hvyf}^(vbzoydf>z&^ z)0rDeWF4#?MjGl#JFHrrqhwK;I9O<~D3e|K-fqS-TT`5=tKty+mEie z``I_J$_}t3|AaTTQ8Oq{+m8hAR2e^rNPDau@#AR7K_?v3Udk zIlBB5oXyoNcl(;nN?OG@Fxy;8?!fhCThbb|WyK*J7@6`+&>%evnJpce3uuQ2F2l|gMbmyy9o0L7=@_Z!5(lyF>bLb`^6;cf5uCF zaK9x-{})t~7QKkn0OYo=(6`|qjFA>dd*zH@QT88t*GLZ`Bddx(Hd!PzGkhMD{hS_+YBTv z-JaR1;La;FZSnH+2{mmh`3EXxTYRLf{eet-4+HrE;a^bF)u+Xcpbrop!oIFfnVx{Y zxda-zbf%pXe)d!~uu!8Zd4yX3M!+ji6;RsUuqO${|2L(m!=qG%fVmYl!o-j#y4BRk zxMB)2#;A|IYDT<)poeuWVJt-P(pxprRrP2s1rdi-Jc5*0X=QCRvAC8FzV6Or&tQ(L zjAU+HL&zJE9>}k_VEus|lERfS%vL_3jiEJ(^C&tHF|KU-F^_x~Bmls$^^ZTN2A-r|c zlP3CL!cG(|?Bz&dSERp3*uuc7lp>+HfT$J%TSM%MP(K|)g$M&d$pFsxnv_LM#S!^u zZ#~J~fznSHh$?LJ!N5@TO*Dx7Gtl0by}c93Yy_!sWFaMW521;JErJxR zwDZf`jb&Dp2SQ^N`d;k0^Ti#6~_b52-b}7PfL^fF{yx z(3G=Cu-T$)+A5ieb7aCzRhlL{#N{{#2bO}gxahE+PwoiI;BU%|BwNfAiNaxi%IYTt zY4A*hI$7x`2y^Z7a3pM;0yq_sUAY*gJ}hHV7Co_0hPlk*N3m!8D0Uz3D0yPXJ4&G^ z(wx2MKQ`>iO@@Ey>u{tw(-5A8EiROYVYXH#PLTVEkK4dm;^B7Wk>DY92O-HYr#T!v z9OWRy43D)%>NYlNBKr&1pg4MC!$S?9t^Q6P5yO8gW7L7d$=vUvxY+nf`x}m54P4e| zUe%i~>CIR5md9EyGWsFMl;-7}GU_46Y#zl1XQInUTqUE0DCYHSSy5X(e=eJEtA~8u zZ*o^K9%WmIqqPi5GHey zNOkaQ!wR{k8zpNIdcc~vFQYfCNo`0)Ah4ay(RB#x;d){wvBQ58({w*{O#7iA$)>A8 zEreCN-+GiIj0Cr&Rm;d$IF(UC#^Gkh=0Y^1TM@)Gxe68RAq-R!3H6_oZf z5L66I37Ft;iYrlua3pv&?+ZmjE+f~`CCJS~ups2anWAxW7Rrk+8s9?3n+yb=0rRtC z$BxiiAA{r)J2?lVCDo(@-YrQR-}QBnX_ zYZEyFf;Er-H8N~))S5q0$VicQjg2`yLsG2LlF(vg#~^zlWm1-;6IPAJi^ovf>v$HW z%_Qnse#TteoMV9juV+xQ!i_HNQ;HXqs9VqwJi|UGw3jX?+u`NX!ulhqCPjwn6#2nX z-v-YxZ9#S`!YTxuix@TN^|*b0=b+am2;n*3FU?Y(X43bA@nt9EWEjqs50MElS7h_j z>h{6fiWbrjzpThsUSxWg;ggE5S^uOlIe4zJS&=w_t`$R`LBB;V%8IR_wOt8mHQnS9 zcx(EMe`Ol6|?xi&@)r zRm7)tq=fmsR#tK?#0r-R4H;T*a+vQZ4^v^Hw-R;W`-W(Zz9Y3g%@@PURV^en){|Cf zY|obKdfV7H4Rr0iGTyH1Z4dWWC)g5;y#udqsf7y_ z9w2NkR@~j3qXlA{Eb%KtJXX$Q?RqJD23s7gZAv6bu(9dn#LS0>X7?POo!ocloeu(- zn0s%WoPFz^*^_@{#GUsJ&YV8Yaxo1NY3*pKj2*O1%k8x?uM@A3x(%M!61^vwwn)foeSZ_=o`Mu*&9dJCeO&HQaN zDU!r%nv-NR929rvGp$$^oy8%p!-?i{QVO@4vq9ZbNNzx7OG)f9v|{&|-?L$xGeEuc zG>o^bPWc8c@KA)VKRgMcQgjWjwPf1nS>IxiqNM*s*_Q}kA>2T?g@6Ik83Y_(RE}V< zqIMu4czkX_aQa*$ZZR(0g|^l--38Q^#{L|seh9R#P;1zV%GqCd7yjJZ-yTT<8hFH|X8>w>%5zLmw^!7%P3{ELBw zh*>Q6DR8DU0#0-kXmFY61B7|F)zMD0P}EtM63v1Q<>nEJ9wXpIL<#KdY^aVw@&C;& z>flVN0s)gOs)fLSGqn0t2j6!Z%kj>!s6+m>s3#4lL@E+N%AqtyD2M1&4QskGlnG2+ z8Wg%J2zgt&7r8j>f37t)|zNie0jj;mBqYSGI#b*uM+N|WdheD6F zMr2F%#EO(uFY!en6$+_r(?4LhkAX!=F%pUch>=)4*b$*_`W!M(F%XmtAj4)-W;2zp zV6&~Bq;E#)6$YXT-yvSlKdq+zhF1l zpm;BTr}&V_fXP>c)fnwJ{}vWvk&sBt$t*~$j0d_ZuQ)BWC_XDcDZZq#U^2Hv4CBnr z84?bxrZ?mj=U2|EyrAiPAn3BZ$8~wXi}HS#KGVI86k9$O|VaqZMyH|iF`Jb=koC|Y5HwG&sWVlIYmT;(Qb36h!D%E1EpHNxoXrjxmh!BLkRpVq)MC>9%U*04oOoIG#TI diff --git a/backend/app/alipay_provider.py b/backend/app/alipay_provider.py index 1a4b65f..c9def05 100644 --- a/backend/app/alipay_provider.py +++ b/backend/app/alipay_provider.py @@ -28,6 +28,7 @@ def validate_configuration() -> None: ("ALIPAY_APP_PRIVATE_KEY_PATH", settings.alipay_app_private_key_path), ("ALIPAY_PUBLIC_KEY_PATH 或 ALIPAY_ALIPAY_PUBLIC_CERT_PATH", settings.alipay_public_key_path or settings.alipay_alipay_public_cert_path), ("ALIPAY_TRANSFER_SCENE_NAME", settings.alipay_transfer_scene_name), + ("ALIPAY_TRANSFER_JOB_TYPE", settings.alipay_transfer_job_type), ) if not str(value or "").strip() ] if missing: @@ -268,13 +269,13 @@ def transfer(*, out_biz_no: str, amount_fen: int, account: str, payee_name: str, model.product_code = "TRANS_ACCOUNT_NO_PWD" model.biz_scene = "DIRECT_TRANSFER" model.transfer_scene_name = settings.alipay_transfer_scene_name - business_name = TransferSceneReportInfo() - business_name.info_type = "业务名称" - business_name.info_content = "问大家问答任务" - business_description = TransferSceneReportInfo() - business_description.info_type = "业务描述" - business_description.info_content = f"用户完成问答任务后发放任务报酬,关联业务:{order_title}"[:100] - model.transfer_scene_report_infos = [business_name, business_description] + job_type = TransferSceneReportInfo() + job_type.info_type = "岗位类型" + job_type.info_content = settings.alipay_transfer_job_type[:32] + reward_description = TransferSceneReportInfo() + reward_description.info_type = "报酬说明" + reward_description.info_content = order_title[:32] + model.transfer_scene_report_infos = [job_type, reward_description] model.order_title = order_title[:128] payee = Participant() payee.identity = account diff --git a/backend/app/config.py b/backend/app/config.py index 3c037e6..2f918ad 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -78,6 +78,7 @@ class Settings: alipay_transfer_api = os.getenv("ALIPAY_TRANSFER_API", "alipay.fund.trans.uni.transfer") alipay_transfer_query_api = os.getenv("ALIPAY_TRANSFER_QUERY_API", "alipay.fund.trans.common.query") alipay_transfer_scene_name = os.getenv("ALIPAY_TRANSFER_SCENE_NAME", "").strip() + alipay_transfer_job_type = os.getenv("ALIPAY_TRANSFER_JOB_TYPE", "").strip() alipay_http_timeout_seconds = int(os.getenv("ALIPAY_HTTP_TIMEOUT_SECONDS", "30")) diff --git a/backend/tests/__pycache__/test_alipay_provider.cpython-313-pytest-9.1.1.pyc b/backend/tests/__pycache__/test_alipay_provider.cpython-313-pytest-9.1.1.pyc index 8878b59438856a2b50848fce25dcd6fbb353996b..7837d39a244729f01549a082d0081c0f2b7c0269 100644 GIT binary patch delta 2339 zcmaKse@s(X6vumM-=k0pC_;-kEg))xRzy%RD9Zdv0hPxuoe>^T6r`oz!WhOMgb4m1 z!t`jIZZVO$xny(BRTncgnZ~&}oxACEqgiX%7ZnBlQX5Q>Q?&*q1j^)Tkwzs{ z2~)zAQR$M4DOyFRNXlsFlG7t23biRr8B;PkB_I{k>8C`(kPIvmy7jSeBP-Y#Web=l zYcwvMVp7a-KCm?+T0&ha6LO79E|itAP@vBYj3^Ai)neeVUNw$;krkx8ri=%DP+{~0 z%5nuNA&NzbwFO{3ar8eu0M_Vd|8H)-w?23}OYxc2+G@AjR9eqfm#50XOKa-NOY585 zj)q8Fdhp<<_fPEaKX-0m_tAmQmj1IH51L!O?;94f@DL0Se15S1!k+u5&J7%Chf&6H z!g+7^2ZODjJUDs!-a8$z$9R?HLUCvsQ{e5;?ZF<*ipIzD2*!uykL}Zi_3BJLI@5b$ zz2>AIb5eJ5PIsQ;maYoiVZU$FN^)Ox(%G#&`nJNuE)n2%ygUXZS;jCBwa_ zq*+>Hf z-A&271U@n~vbA6_+l*!8mEKfq8yq|Z%FL7E`Fe5%sm}81bq#e59;=?$poecJ)Dqlq z%)D7@M{|ZZA$oFfxCrG@XeA*Z*2Kr?UlcGEF4}RL;>TF10KP>C5Sv0(kH^95EeTWH zO|z{Yz7=l7*CY#3F^N_XR==!FvwEnBw8gv`L)hR9v3~2s9Ox>J%NND-6iV$Nw2>&p zr{!v+zkvExGP3~QUodgbx5~`&GXfE)26V3$Ad4s%}gfR#! z}0y_?mGnP+$sqzYni`5)t`5OVp+~sK>)4QlylsmlfT3*-a?_;EX;KtI+LG9=sOvF8bl`INQE!)F7Av1ep%=hT;#K+^$>l-(-J=dSt1J|-=vmVge zC$cLr#cq+VqOKis?aAymG}|XJI~=#~8Y^a1478Y4{|2FwZ-eZdmdN372|2|iY=gTw zNi?Z}{?E(|Jq6|hYY4whl0JeM&VP4d~8BiX-wG^!(&v$6LN zb5}`s(ck9P=gxk$<5 zU;ktJog(iF`T7xu$@qpKGOoZKZ8RJxXqS(W?;1=hR71Pbvw^aG-Dt>w<`) zM0N`@i(+g)kn%^uXo7|C6GGJ4?5|U7)F3*Kz|Nw0S-jqaQ$;poFUe_=@m5$1dsP$M zH<@5;@vL#QuU3h_>OeZ7wm8o4Go{iT@L%W-TqX|Z#i`)s;Zc2Bk2Be)byQT0I3)1} zid*6irS3=k=Wu4=Dd~g~qD`NE zvAV%glA4sx|G>x@xL+2}7#P%Tk^`ZWEur-svuNtM%)-7Ds_If|x&lSMXi=GWHzCRBVt&W9Wo;dxev+3V2*O z)1cDA;*M&8B*%&@553d3#_6);M+x-p^1B4u0#0j)Ng5s>pFYD`SJ_bOn8#z_k|Rrs MWb)%A2&zi_8?;$rbpQYW delta 2236 zcmaKsc}!GS6o==|@E!~>zR1>y# zk_5>M2E;jjYP}+nNZy6siSn6FxQ$FE`K<7O)4`LWC|3=o&Ls+;6|RsI8UoqVlpfL~ zojg{Q$*P?sU+Fz~>)hnyC$OZMgy+htMZGBb!#l!72l zsn-N!R<*MTF<%05v#_1DVgfaHW~ixg#GXl`-yYR zc=m1Qz=aF;*6wDX%I;(@`lZ9^yb4qfgXJbr1yLk8R1hc2Ij{i^FE z14=z+lUz9DvDKBb2Wr^QVuPukxv^bliW#@vW^$GJ9qNmTD$mDQuJVm|^f*Rklg1KXVzWUeymN^4AXG4s$Rh^2_Nh%_koD|E|Z zrcGgPh^GbclixbB5|;Suyo*p3)*7nnjWiL1i=oj!YO+mfFqKrSuCJ-LXkBOpIyN9G z5jAktf1}XK%mizSCfe1DyE4(W43Pty!vjeg91Ncoich5*xyrEK!(g!(XF z%Mq!FT3j)-Q^Djm(tK%pAJYvPrgaaoJV zg&N%=p^KS%>sj4LDzEY0j5Rnsc}~a&%s;$}fxfe1*pR$xLShaEZi12INb)uK&dYWy zM!``r^cMJtj*_8yUiR!`=;GD!!p6I)pf&3p6^|FY2ZOgEn!$7aa^X8>mRU{nmnlgL z^h#6U$%ltYD{M`PBfW4YB`okF3us}#m)O5;vOncSsiTvaP5WRp<%%<2?r=;usAGNL zR_Y$o0VQd*fj61j!G0D;)}x?=woFIXZTLMciQI;$^a#=i>FJ@uH5RuM%<1vuK75%T z#YXW)dP~6gDDo+DG=xRcMlfZ3>O1Z(K#|{gBRFMF=Ytm|xB0`bdjCAFJH3zohX_7w z|2AOau+64;M4LN~Us(+`8R}-lJ36-=^$BB{#Eu+Aokptao97 zmzhAPAiig?5Qb2y#&s{em5LUBj^+;t-aw4ZqE~Ruleoyk`%rtza0rbb5o0ayS7@Lo zuTAVi?FOXk4Ia0csg>KD>Ke>OdKY^1o5*39l^>IKmpQW72O$V!gAtPvA&5JOUl87i zP{ch3Ui2r9qIu_rnAip1JPlk5Dub}IT7kanK6XKSL70~fV{r`V zV+8+VEgicT_BpT^Yzm7h-li~?mQJ`P{-R;?=@SGn{O5XR@O#h;ubAVYwW;u$NX}cc zijoQGfwtm2)!&#E%Ah6m4LmQ_2(Q`VJh&Rdi41gx1U6*(aek(~OZy>3( zQcyG3N$ZhP6CowwYfNyw*nYVC7Lbg~A}E@zh)zTo0$)