手机版

ASP.NET芯2.0支付宝扫码支付实现码

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

自从微软换了CEO,微软的战略方向发生了很大的变化,不再那么封闭。它开拓了很多东西,拥抱了开源社区,实现了跨平台。NET,收购xamarin并免费提供给开发者等等。我个人喜欢。并希望。净核心将上升。我从。净核心1.1到。现在是net core 2.0。与1.1相比,net core 2.0有一些变化,api增加了很多,这使得它更容易使用。最近百度在和ASP.NET芯做支付宝对接,但是百度找不到芯支付宝支付的相关信息,所以自行研究。官方服务器sdk已更改为。净标准2.0 (https://github.com/stulzq/Alipay。根据官方演示,ASP.NET酷睿2.0个人电脑网站支付演示成功。之前写过一篇文章介绍:ASP.NET芯2.0使用支付宝PC网站支付,大家可以看看。今天我们讲的是支付宝面对面支付中的扫码支付。

扫码支付简介

扫码支付是支付宝中的一种支付方式,包括条码支付、扫码支付和声波支付。

扫码支付是指用户在支付宝钱包中打开“扫描”功能,在收银场景中扫描商家显示的二维码并进行支付的模式。该模式适用于线下实体店支付和面对面支付。

使用示例:

1.给直播平台充值

2.一个视频网站开通vip

扫码支付比传统的跳网支付更方便快捷。

业务流程:

使用步骤:

收银员在商户收银系统中操作,生成支付宝订单,生成二维码;用户登录支付宝钱包,在首页点击“支付-扫码支付”或直接点击“扫码”进入扫码界面;用户扫描收银员提供的二维码,核对金额,确认付款;用户付款后,商户收银系统会得到付款成功或失败的结果。详见官方文件:https://docs.open.alipay.com/194

部署

创建一个ASP.NET核心2.0 MVC项目

创建新的配置类配置

公共类Config{ //应用程序ID,您的APPID公共静态字符串AppId=///summary///cooperative merchant uid////summary public static string uid=' ';//支付宝网关公共静态字符串gateway URL=' https://openapi.alipaydev.com/gateway.do';//商家私钥,你原来的RSA私钥公共静态字符串PrivateKey=//支付宝公钥,检查地址:APPID下支付宝公钥对应https://openhome.alipay.com/platform/keyManage.htm.公共静态字符串AlipayPublicKey=//签名方法:public static string sign type=' RSA 2 ';//编码格式公共静态字符串字符集=' utf-8 ';}下面的演示都是支付宝沙盒环境,指的是辅助开发者进行界面功能开发和主要功能联合调试的辅助环境。沙盒环境模拟开放平台部分产品的主要功能和主要逻辑。在应用在线审核之前,开发者可以根据自己的需要,在沙盒环境中对各种开放接口进行理解、组合和调试,帮助开发者在应用在线审核完成后,更快速、更顺利地进行在线调试和验收工作。

如果您想在注册或创建应用程序之前测试集成,可以使用沙盒环境

关于配置的详细说明,请看我之前的文章:ASP.NET芯2.0使用支付宝PC网站支付

ASP。NET Core 2.0实现扫码支付

用于生成二维码的组件的名称是二维码,它指的是一个系统。绘图类库由第三方实现,现收现付的SDK是支付宝。AopSdk.F2FPay,现已更新为github和nuget。https://github.com/stulzq/Alipay. https://www.nuget.org/packages/Alipay.AopSdk.F2FPay/:号核心

新控制器FTFPayController

1.生成二维码操作

///摘要///生成支付二维码////summary////param name='订单名称'订单名称/param///param名称='订单金额'订单金额/param///param name=' Outradno '订单号/param///returns/returns[HttpGet]public iactionresultscancodegen(字符串订单名称,字符串订单金额,字符串outredeno){ AlipayTradePrecreateContentBuilder=BuildPrecreateContent(订单名称、订单金额、outredeno);//如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。alipayf2fp结果precreate result=_ service client。tradeprecreate(生成器);//字符串Notify _ URL=' http://10。5 .21 .14/支付/通知';//商户接收异步通知的地址//alipayf2fpredresult precreate result=service client。TradePrecreate(生成器,notify _ URL);//以下返回结果的处理供参考//payResponse .二维码即二维码对于的链接//将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付定义变量位图=新位图(路径。组合(_hostingEnvironment).WebRootPath,' images/错误。png ');开关(预创建结果。状态){案例结果枚举。成功:位图dispose();位图=RenderQrCode(precreateresult。回应。二维码);//轮询订单结果//根据业务需要,选择是否新起线程进行轮询parametersedthreadstart par start=new parametersedthreadstart(Loopquery);Thread myThread=new Thread(parStart);对象o=precreateresult。回应。outradeno神话阅读。开始(o);打破;案例结果枚举。失败的:控制台WriteLine(“”生成二维码失败:' precreateresult。回应。身体);打破;案例结果枚举。未知:控制台WriteLine(“”生成二维码失败:'(precreateResult.response==null?'配置或网络异常,请检查后重试' : '系统异常,请更新外部订单后重新发起请求'));打破;}内存流ms=新内存流();位图。保存(毫秒,图像格式. png);byte[]bytes=ms . GetBuffer();返回文件(字节、“image/png”);}2.构造支付请求数据

///摘要///构造支付请求数据////summary////param name='订单名称'订单名称/param///param名称='订单金额'订单金额/param///param name=' Outradno '订单编号/param/返回请求结果集/返回proveate AlipayTradePrecreateContentBuilder BuildPrecreateContent(字符串订单名称,字符串订单金额,字符串outradeno){//线上联调时,请输入真实的外部订单号如果(字符串IsNullOrEmpty(outradon)){ outradon=System .日期时间。现在。tostring(' yyymmdhmms ')' 0000 '(新的Random()).下一个(1,10000)。ToString();} AlipayTradePrecreateContentBuilder=new AlipayTradePrecreateContentBuilder();//收款账号builder.seller_id=Config .Uid/订单编号建筑商。out _ trade _ no=Outradeno//订单总金额建筑商。total _ amount=订单金额;//参与优惠计算的金额//构建器。discovable _ amount=//不参与优惠计算的金额//构建器。未贴现_金额=' ';//订单名称builder.subject=orderName//自定义超时时间builder.timeout _ express=' 5m//订单描述builder.body=//门店编号,很重要的参数,可以用作之后的营销builder.store_id='测试存储' id ';//操作员编号,很重要的参数,可以用作之后的营销builder.operator _ id=' test//传入商品信息详情listogodsinfo GList=new listogodsinfo();GoodsInfo goods=new GoodsInfo();goods . goods _ id=' goods id goods . goods _ name='商品名称;商品.价格=' 0.01货物。数量=' 1 ';gList .添加(货物);builder.goods _ detail=gList//系统商接入可以填此参数用作返佣//ExtendParams exParam=new ExtendParams();//ExParam。SysServiceProvideRid=' 20880000000000 ';//构建器。extendparams=ExParam返回生成器;}3.渲染二维码

///summary///render QR code///summary//param name=' str '/param///returns/returns private bitmap render QR code(string str){ QR code generator . ECC level ECC level=QR code generator . ECC level . l;使用(qrcode generator qrcode generator=new qrcode generator()){使用(qrcode data qrcode data=qrcode generator。CreateQrCode(str,ecCLaSS)){使用(QrCode QrCode=new QrCode(QrCode data)){位图bp=qrCode。GetGraphic(20,彩色。黑色,彩色。白色,新位图(路径。组合(_hostingEnvironment)。WebRootPath,' images/alipay.png '),15);返回BP;}} }}4.投票支付结果

///summary////轮询支付结果//////summary///param name=' o '=' o '订单号/param public void loop查询(对象o) {AlipayF2 fqueryresult查询结果=new AliPay F2 fqueryresult();int count=100int区间=10000;字符串outradeno=o . ToString();for(int I=1;i=计数;i ) {线程。睡眠(间歇);query result=_ service client . tradequery(outradeno);if (queryResult?状态==结果枚举。成功){ DoSuccessProcess(query result);返回;} } DoFailedProcess(query result);}///汇总////请在支付成功后添加处理////汇总私有Void DosuccessProcess(AliPay F2 fqueryresult Query Result){//如果支付成功,请更新相应的文档Console。写线('扫描代码支付成功:商户订单号'查询结果。Response.outradeno}///汇总////请添加支付失败后的处理////汇总私有void dofailed流程(AlipayF2 fqueryresult查询结果){//如果支付失败,请更新相应的文档Console。WriteLine('扫描代码未能支付:商户订单号' queryresult . response . outrado);}以上代码仅供演示。请在实际使用中根据自己的需要进行修改。例如,轮询应该由一个或多个特殊的后台任务线程来执行,而不是每个订单一个线程。请注意。

演示演示

1.生成二维码

要生成二维码,必须提供三个参数:商家订单号、订单金额、订单名称,否则会出现错误。

2.扫描付款

打开手机支付宝,点击并扫描二维码完成支付。

如果使用沙盒环境,必须下载沙盒版支付宝。如果使用支付宝官方版扫描沙盒环境api生成的二维码,二维码将无效,可以在沙盒环境后台下载。沙盒环境必须使用沙盒环境帐户。

(1)扫码后:

(2)成功支付:

3.支付结果

通过轮询获得的结果:

地址集

往期文章:ASP.NET芯2.0使用支付宝PC网站支付

亲自交公文:https://docs.open.alipay.com/194

Nuget组件:

二维码生成:https://www.nuget.org/packages/QRCoder/

支付宝。https://www.nuget.org/packages/Alipay.AopSdk.F2FPay/

支付宝当面支付服务器SDK:https://github.com/stulzq/Alipay.核心

演示:https://github.com/stulzq/Alipay.演示PCPayment

摘要

以上是边肖推出的ASP.NET芯2.0支付宝扫码支付的实现代码。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:ASP.NET芯2.0支付宝扫码支付实现码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。