0x0001 前言
经过一周的摧残,终于完成了微信支付,做完总结一下,觉得其实并不难,主要是网上没有一个明确的教程.
本文是基于C#语言上进行开发,其实本人是做java的,但由于最近接手维护的项目是C#的,所以也强制让自己简单的熟悉一遍C#(偷偷的说,我C# .net .asp都还没清楚,不过最重要的是思路,语言只是一种工具~~~)
0x0002 项目背景(可略过)
- 项目类型:在线考试系统;
- 项目要求:让之前全部免费的试卷部分收费,故选用微信支付 (PS:早知道微信支付官方文档这么坑,就选型支付宝了)
- 项目业务:系统暂时要求点击支付时网站弹出生成的微信支付二维码,由用户进行扫描购买,购买完成后用户可使用已购买的商品(试卷);
- 微信支付产品选型:微信有多种支付模式,如下:
根据实际情况需求,推荐使用Native支付,此种方式简单也能完成我们的需求.(一开始选的JSAPI,但是后来实在做不动了,就换了Native支付,不过现在看来,都差不多,只是JSAPI需要多获取几个微信指定的属性)
Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站、实体店单品或订单、媒体广告支付等场景。
0x0003 开发思路
- 简单来说:微信扫码支付就是我们把需要的信息生成二维码,然后用户扫描二维码就出现了我们想要展示的信息.
- 稍复杂来说:微信扫码支付就是我们把部分重要信息(商品价格\商品id等)发送给微信服务端,微信返回生成包含我们提交数据且加密的微信支付协议的URL,我们接收此URL并将其生成一个二维码图片,用户通过微信扫一扫,发起支付。
- 总体来说:
1.注册微信商户号,接入微信支付,配置微信支付平台的 支付授权目录 和 扫码回调链接;
2.用户点击支付时,前端向服务端传递相关数据id;
3.服务端接收id后查询核对,按照微信扫码支付规则调用微信支付接口;
4.微信支付接口根据一系列数据比如(商品价格\商品id)加密生成签名后返回一个带微信支付协议的URL;
5.使用相关生成二维码的工具(QRCode.js)将URL生成二维码图片;
6.用户扫码跳到支付界面,点击支付后,微信服务端调用我们的扫码回调链接;
7.需要提前写好扫码回调链接的类或方法,根据微信传来的诗句在此核对数据,通过则更改自己系统的某状态,并返给微信服务端成功.
0x0004 开发过程
0.准备工作
- 申请 微信商户号 微信公众号 (这里具体步骤不描述,因为这属于公司申请):
- 开通 Native支付(点击开通,很简单,但需要管理员账号)
- 安装 微信认证证书
1.下载官方工具类(Native 模式二)
官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5
先下载官方提供的工具类Demo
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1