拓冰建站拓冰建站
首页 / 资讯中心 / 正文

【电商核心业务实战】(7) 电商项目订单支付实战

当前电商项目中通过接入支付宝提供了订单在线支付功能并且后续针对用户下单后的支付流程做了定制化的设计。采用了一套基于RocketMQ事务消息实现的订单确认机制来完成订单超时回退功能。这一节课主要就是带大家理解电商项目中对于订单支付功能的设计。当然重点是希望大家能够针对不同的支付场景尝试进行不同的优化设计。今天课程的关注点是以下几个问题了解支付宝支付能力接入方式。项目中主要是通过支付宝的沙箱环境快速接入支付宝进行订单支付。电商项目如何对支付流程进行设计及优化。支付宝接入流程简介当今互联网时代第三方支付已经成了人们不可或缺的一个生活工具也成为了互联网公司必不可少的业务拼图。但是支付实际上是一个风险非常大的业务真正能够自主开发第三方支付产品的企业非常少。国内目前有支付牌照的公司总共只有两百来家。因此大部分企业都需要接入第三方支付产品通过他们形成自己的支付能力。比较有名的第三方支付产品有支付宝、云闪付、和包支付、翼支付等。当前电商项目采用支付宝作为第三方支付产品。这一章节先来了解下如何接入支付宝。1、支付宝接入哪些应用场景支付宝提供了两个重要的服务开放平台对外开放自己的核心支付能力。第三方企业都可以通过这两个服务开放平台接入支付宝借助支付宝开发自己的支付场景。一个是面向商家的支付宝商家中心(https://b.alip ay.com/page/portal/home)另一个是面向开发者的支付宝开放平台(https://open.alipay.com/)。。)当然我们这次更关心的是在技术层面如何快速接入支付宝所以更关心后面的支付宝开放平台后面简称支付宝平台。首先可以进入支付宝平台快速了解一下支付宝有哪些接入方式。可以看到当前支付宝的接入场景是非常丰富的。当前电商项目会采用当面付支付场景进行接入。官网上对于当面付有非常多详细的文档(文档地址https://opendocs.alipay.com/open/194/105072?refapi)并且还提供了非常丰富的示例。并且还提供了非常丰富的示例。)当面付有两种典型的场景一种是用户出示付款码商家扫描二维码付款。另一种是购买商品后商家出示二维码用户使用支付宝扫描二维码完成付款。这两种支付场景相信你一定不陌生或多或少的都应该通过这种模式购买过产品。电商采用的是第二种扫码支付的场景即用户下单后会在网站上给用户展示一个二维码然后用户扫码完成支付。有兴趣你可以仔细阅读理解下官方的文档理解一下在你日常购买过程中整个数据是如何流转的。2、了解支付宝沙箱环境与正式环境如果你仔细看下这个文档一定会注意到一个章节是计费模式。是的第三方应用采用这种方式每一笔交易都是需要付费给支付宝的。这样对于开发很不方便。在支付宝开放平台上给开发者提供了一个测试用的沙箱环境。https://openhome.alipay.com/develop/sandbox/app沙箱环境提供了一系列开发调试所需要的帐号与应用信息这些测试帐号会定期改变。这里最重要的是PID和APPID两个参数。沙箱环境直接给出了对应的尝试数据正式环境都需要向支付宝进行申请才能获取。其中PID表示商家账户ID在正式环境中需要由商户登录支付宝商家中心后获取。而APPID表示在支付宝上注册的第三方应用的ID。需要由开发者创建应用获取。开发者登录支付宝开放平台后进入控制台创建对应的应用。创建应用后还不算完需要商户绑定应用这样的PID和APPID才可以一起使用。商户登录商家平台后在账户中心选择APPID绑定绑定开发者创建的应用。这里省略掉了正式环境各种提交资料审批的复杂过程。另外沙箱环境还提供了一个沙箱版本的支付宝APP这个在后面电商项目中也是需要用到的需要大家下载沙箱版支付宝APP并安装到手机当中。下载页面 https://open.alipay.com/develop/sandbox/tool 在页面下方有个产品列表部分可以看到沙箱环境中的商户已经完成了很多重要产品的签约在正式环境都是需要单独进行签约的。支付宝的正式环境和沙箱环境的接口并不完全一样。真实应用在沙箱环境调试成功后并不能保证在正式环境就一定没有问题还需要迁移到正式环境重新测试验收。3、当面付应用测试接入支付宝在支付宝开放平台上针对各种应用场景提供了非常丰富的SDK工具包以及配套的Demo。这里我们直接提供一个包含了支付宝当面支付和电脑网站支付的Demo案例节省大家找文档的时间。见测试项目 AlipayDemo。当面付模块只需要启动Main.java即可运行。但是在运行之前需要调整一些配置信息。这些配置信息都在zfbinfo.properties文件中。电脑网站支付的配置信息在com.example.demo.config.AlipayConfig中。app_id 和 pid属性可以在沙箱应用页面直接获取。open_api_domain这个属性是请求网关地址URL默认是正式环境的网关地址。沙箱环境的网关地址是 https://openapi.alipaydev.com/gateway.do 。mcloud_api_domain是一个用于统计的网关。alipay_public_key是支付宝公钥属性需要在沙箱应用页面查看。private_key和public_key是应用自己设置的私钥。其中这个密钥需要生成一对公私钥将应用的公钥上传到支付宝上而私钥自己保存。支付宝采用的是RSA非对称加密的方式来保证业务请求的安全性RSA加密方式需要两个成对生成的公私钥来对报文分别进行加密和解密其中私钥自己保存而公钥则分发给对应业务方。通常用于一次请求的加解密过程。而支付宝开放平台采用的是双向非对称加密的安全机制。应用注册时支付宝会生成一组支付宝公私钥公钥分发给应用私钥支付宝自己保存。应用往支付宝发起请求时需要自己获取公钥用来对发往支付宝的请求报文进行加密。支付宝会尝试使用对应的私钥进行解密如果解密不成功则会报验签错误的异常不允许访问服务。支付宝在往应用推送业务报文时同样需要应用自己生成一组应用公私钥应用自己保存私钥公钥则上传到支付宝中。支付宝在推送业务报文时会使用公钥进行加密。应用只有使用对应的私钥解密才能获取到业务数据。这样才能保证业务报文的安全性。生成密钥时可以下载支付宝提供的密钥生成工具进行生成。工具下载参见网页 https://opendocs.alip ay.com/common/02kipl 配置修改完成后需要在MAIN.java中做一下小修改在它的435行需要配置一下二维码图片的生成地址并且把生成二维码的那一行代码解除注释。// 需要修改为运行机器上的路径String filePath String.format(D:/alipay/qr-%s.png, response.getOutTradeNo()); log.info(filePath: filePath); ZxingUtils.getQRCodeImge(response.getQrCode(), 256, filePath); break;保存二维码的目录要提前手动创建。然后执行MAIN.java。如果参数没有问题会提示支付宝预下单成功的日志信息。19:26:18.367 [main] INFO com.example.f2f.Main - 支付宝预下单成功: ) 19:26:18.367 [main] INFO com.example.f2f.Main - code:10000, msg:Success 19:26:18.367 [main] INFO com.example.f2f.Main - body: {alipay_trade_precreate_response: {code:10000,msg:Success,out_trade_no:tradeprecreate16632411762145609885, qr_code:https:\/\/qr.alipay.com\/bax046621l7l0boqqkcf001d},sign:eELa9G0YxKEjM sXiSDSMbFEvBfJuhOwBjTZ239ZdiKfVYkdjmZjCy59iNlBS/b0N13y1XL3K9yd1En48VFSYk3PJ5aJBoJLh eeEB9vAqW1a26L2Gx6AuIeK8A8y2//B4jGUSobjq2X5m1WbbJL2zgLDjnaS9bvWW3mzEXg2A2OL/foL0l8p M8lGrVifxiPTQ1hPu1ieYrIz3/nIVjQWlWIGalNKAjA9Nckt9vKbk8Cd1pWpNtj63Y1alp3b08KG7qph1ri sUQcu0bdZ0FZryLpAHK6sazIlZZtWSG10p0yR7yoZQGjuNtMZEj5Uv0/tTORN9/ylNtnR2tAKqghQ} 19:26:18.367 [main] INFO com.example.f2f.Main - filePath:D:/alipay/qr- tradeprecreate16632411762145609885.png然后在配置的目录中可以看到生成的二维码图片。在做实际应用集成时这个二维码图片就可以展示到应用的前端页面上然后给客户扫描支付。需要注意的是这个二维码图片是对接支付宝沙箱环境生成的扫描时也必须用沙箱环境的支付宝APP扫码支付。在示例中还有其他的一些业务操作比如查询、退货等可以自行体验。测试的结果可以到沙箱环境查看买家和卖家的余额变化确认交易是否正常完成。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门