1. 微信支付简介
微信支付是腾讯旗下的第三方支付平台
- 服务内容丰富
- 微信支付不仅提供支付功能,还为各类企业和小微商户提供专业的收款能力、运营能力、资金结算解决方案以及安全保障。
- 用户可以使用微信支付进行购物、餐饮、旅游、医疗等多种消费,享受便捷、安全的支付体验。
- 安全保障措施
- 微信支付采取多种安全措施,包括加密技术、风险监控等,确保用户资金安全。
- 微信支付也提醒用户注意防范假冒“微信碰一碰支付”等代理加盟的风险提示,避免遭受损失。
- 支付方式多样
- 付款码支付:用户展示微信钱包内的“付款码”,商家扫描后完成支付,适用于线下面对面交易。
- JSAPI支付:适用于线下场所、公众号场景和PC网站场景,用户扫描二维码后输入金额完成支付。
- 小程序支付:在微信小程序内实现支付功能,方便用户在应用内完成交易。
- 其他支付方式:还包括Native支付、APP支付、刷脸支付等,满足不同场景下的支付需求。
2. 微信支付的前期准备
1. 服务号申请
服务号申请网站
输入信息进行服务号的申请
服务号申请后会给的参数
appid 服务号id
appsecret 服务号的秘钥
2. 商户申请
微信支付只针对企业(营业执照、个人工商许可证)开发,不针对个人开放。
商户申请网站
点击上图的接入微信支付按钮,进入下图的商户信息注册
商户接入微信支付需要提交的材料 查看网址
商户申请后,会绑定一个微信作为管理员,可以通过该管理员登录微信的商户后台
会给一个数据
mac_id 商户id
mch_secret 商户的秘钥
支付需要的参数
/*服务号的 appid 和 appsecret 公司了之后,公司提供,自己申请(微信的认证 300元/年)*/
appid: 'wx48ed79bdfeabc5',
appsecret: 'f49a7139a51dadsf56d09ca2de7e6',
/*商户 id 和 秘钥*/
mchid: '153964daf1',
partnerKey: '749eadf9d9fc1f8effdf45c9cc29774',
/*小程序的 appid 和 secret*/
xcxid: 'wx1c01ba3asdf99c6af',
xcxsecret: '99bea53a7e43fb63442370a8628d1',
3. 已备案的服务器和https域名
二、微信支付的种类及使用场景
- 付款码支付
- 场景:拿扫码枪进行扫用户的二维码进行付款或线下面对面交易,如商超、便利店、餐饮店等
- 特点:用户展示微信钱包内的付款码,商家扫描后完成支付,过程快捷,可能支持免密支付
- JSAPI支付
- 场景:线下场所扫码支付、公众号内支付、PC网站支付
- 特点:用户扫描二维码后,在微信内输入支付金额,完成支付
- 小程序支付
- 场景:微信小程序内支付
- 特点:在小程序平台内实现支付,提升用户体验及转化率,需开发小程序并通过微信审核
- Native支付
- 场景:拿手机扫二维码付款,PC网站支付,需展示支付二维码
- 特点:商家预先指定支付金额,用户扫描二维码完成支付,开发成本较高但用户体验好
- APP支付
- 场景:移动端独立APP内支付
- 特点:需用户下载并安装微信客户端,在APP内集成微信支付模块完成支付,稳定可靠
- 刷脸支付
- 场景:具备刷脸设备的支付场景
- 特点:用户通过刷脸设备识别身份后进行支付,便捷且安全。
- H5支付
- 场景:移动端网页支付,网页不能在微信的内部,只能外部浏览器打开
- 特点:用户无需下载额外的应用程序,只需在浏览器端即可完成支付,操作简便。
3. 环境搭建过程
- 搭建后端服务
建好的文件夹中进行init命令
再执行npm init -y
建立服务,确定监听端口npm install express
const express = require('express') const app = express() app.get('/', function (req, res) { res.send('Hello World') }) app.listen(8001)
- 同步显示服务器
webstorm代码编辑器 —工具----部署—配置项
对远程服务器信息进行填写
在远程服务器中创建后端的代码文件夹 文件夹目录在根目录下 /root
项目目录右键 — 部署— update 进行上传(下图我没有进行配置)
查找远程nginx的配置页面
在nginx.config文件的http端下配置如下反向代理
是代理的服务名xiaoke
域名管理—配置文件处需要配置反向代理upstream xiaoke{ server127.0.0.1:8001; }
反向代理配置 xiaoke上nginx配置的代理名称
proxy_passhttp:// xiaoke;{ listen80; listen443sslhttp2; server_nameapi.52kfw.cn; indexindex.phpindex.html index.htmdefault.phpdefault.htmdefault.html; root/www/wwwroot/api.52kfw.cn; #SSL-STARTSSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page404/404.html; #HTTP_TO_HTTPS_START if($server_port!~443){ rewrite^(/.*)$https://$host$1permanent; } #HTTP_TO_HTTPS_END ssl_certificate /www/server/panel/vhost/cert/api.52kfw.cn/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/api.52kfw.cn/privkey.pem; ssl_protocolsTLSv1TLSv1.1TLSv1.2; ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_cipherson; ssl_session_cacheshared:SSL:10m; ssl_session_timeout10m; error_page497 https://$host$request_uri; #SSL-END #ERROR-PAGE-START错误页配置,可以注释、删除或修改 #error_page404/404.html; #error_page502/502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 includeenable-php-72.conf; #PHP-INFO-END #REWRITE-STARTURL重写规则引用,修改后将导致面板设置的伪静态规则失效 include/www/server/panel/vhost/rewrite/api.52kfw.cn.conf; #REWRITE-END #禁止访问的文件或目录 location~^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return404; } #使用反向代理配置开始 location/{ proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerHost$http_host; proxy_set_headerX-Nginx-Proxytrue; proxy_passhttp://xiaoke; proxy_redirectoff; } #使用反向代理配置结束 #一键申请SSL证书验证目录相关设置 location~\.well-known{ allowall; } location~.*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_logoff; access_log/dev/null; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerHost$http_host; proxy_set_headerX-Nginx-Proxytrue; proxy_passhttp://xiaoke; proxy_redirectoff; } location~.*\.(js|css)?$ { expires 12h; error_logoff; access_log/dev/null; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerHost$http_host; proxy_set_headerX-Nginx-Proxytrue; proxy_passhttp://xiaoke; proxy_redirectoff; } access_log /www/wwwlogs/api.52kfw.cn.log; error_log /www/wwwlogs/api.52kfw.cn.error.log; }