首页 > 其他分享 >开通微信支付流程

开通微信支付流程

时间:2024-08-03 11:29:42浏览次数:15  
标签:openid code 微信 流程 支付 开通 data order

1. 注册微信支付商户账号

访问微信支付商户平台:前往微信支付商户平台。
注册账户:根据提示注册微信支付商户号,填写相关信息并提交审核。

2. 配置开发环境

登录微信支付商户平台:使用商户号和密码登录微信支付商户平台。
获取商户号和密钥:
在左侧菜单中选择「账户中心」-「账户设置」-「商户信息」,获取商户号。
在左侧菜单中选择「账户中心」-「账户设置」-「API安全」,设置API密钥(32位的随机字符串),并保存。

3. 开通微信支付功能

进入功能配置:
在左侧菜单中选择「产品中心」,选择需要开通的支付产品(如JSAPI支付)。
按照提示进行开通和配置,填写相关信息。

4. 配置支付目录

设置支付授权目录:
在左侧菜单中选择「产品中心」-「开发配置」。
在「支付授权目录」中添加你的Uni-App小程序的支付目录,比如https://yourappdomain.com/pay/。

5. 获取证书

下载API证书:
在左侧菜单中选择「账户中心」-「账户设置」-「API安全」,下载API证书(包括apiclient_cert.pem和apiclient_key.pem)。

6. 在小程序后台绑定微信支付

登录微信公众平台:前往微信公众平台并登录。

绑定微信支付商户号:

在左侧菜单中选择「小程序管理」-「开发」-「开发设置」。
在「微信支付」一栏中,点击「绑定商户号」,输入商户号并进行绑定。

7. 后端服务器配置

7.1 安装依赖

你需要安装一个微信支付的Python SDK,比如wechatpy。

pip install wechatpy

7.2 在后端服务器中,配置微信支付接口。

7.2.1 初始化微信支付

你需要配置微信支付的参数,包括appid、mch_id、api_key、以及证书路径。

from wechatpy import WeChatPay

config = {
    "appid": "your_app_id",
    "mch_id": "your_mch_id",
    "api_key": "your_api_key",
    "mch_cert": "/path/to/apiclient_cert.pem",
    "mch_key": "/path/to/apiclient_key.pem",
    "notify_url": "https://yourappdomain.com/pay/notify",
}

wechatpay = WeChatPay(config["appid"], config["api_key"], config["mch_id"], 
                      mch_cert=config["mch_cert"], mch_key=config["mch_key"])

7.2.2 创建统一下单接口

在你的后端实现统一下单接口。

from flask import Flask, request, jsonify
import random
import string

app = Flask(__name__)

def generate_order_id():
    return ''.join(random.choices(string.ascii_uppercase + string.digits, k=16))

@app.route('/pay/unifiedorder', methods=['POST'])
def create_order():
    data = request.json
    openid = data.get('openid')
    order_id = generate_order_id()
    total_fee = data.get('total_fee')  # 单位:分

    order = wechatpay.order.create({
        'trade_type': 'JSAPI',
        'body': '商品描述',
        'total_fee': total_fee,
        'notify_url': config['notify_url'],
        'out_trade_no': order_id,
        'openid': openid,
    })

    return jsonify(order)

if __name__ == '__main__':
    app.run(debug=True)

7.2.3 接收支付通知

实现支付通知接口,处理微信支付的异步通知。

from flask import Flask, request
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException

@app.route('/pay/notify', methods=['POST'])
def notify():
    try:
        wechatpay.parse_payment_result(request.data)
        # 处理订单状态
        return wechatpay.reply('SUCCESS', 'OK')
    except InvalidSignatureException:
        return wechatpay.reply('FAIL', 'Invalid signature')

7.2.4 小程序前端调用微信支付

在小程序前端,调用你后端的统一下单接口,获取支付参数,并调用微信支付接口进行支付。

wx.request({
  url: 'https://yourappdomain.com/pay/unifiedorder',
  method: 'POST',
  data: {
    openid: '用户的openid',
    total_fee: '商品总价(分)'
  },
  success(res) {
    const paymentData = res.data;
    wx.requestPayment({
      timeStamp: paymentData.timeStamp,
      nonceStr: paymentData.nonceStr,
      package: paymentData.package,
      signType: 'MD5',
      paySign: paymentData.paySign,
      success(paymentRes) {
        // 支付成功处理
      },
      fail(err) {
        // 支付失败处理
      }
    });
  }
});

8. openid 获取步骤

8.1 前端小程序获取用户登录凭证(code),后与后端交互获取openid

微信小程序的用户登录是通过 wx.login 方法获取登录凭证(code)。

wx.login({
  success: function(res) {
    if (res.code) {
      // 发起网络请求,发送 code 到后端服务器
      wx.request({
        url: 'https://yourappdomain.com/get_openid',
        method: 'POST',
        data: {
          code: res.code
        },
        success: function(response) {
          // 得到 openid
          const openid = response.data.openid;
        }
      });
    } else {
      console.log('登录失败!' + res.errMsg);
    }
  }
});

8.2 后端服务器使用 code 获取用户的 openid

后端服务器需要使用微信提供的接口,通过 code 换取 openid 和 session_key。

8.2.1 获取 openid 和 session_key

微信提供的接口 URL:

https://api.weixin.qq.com/sns/jscode2session?appid=YOUR_APPID&secret=YOUR_SECRET&js_code=JSCODE&grant_type=authorization_code

8.2.2 后端处理代码示例(使用 Flask 和 Requests)

import requests
from flask import Flask, request, jsonify

app = Flask(__name__)

APPID = 'your_app_id'
SECRET = 'your_app_secret'

@app.route('/get_openid', methods=['POST'])
def get_openid():
    code = request.json.get('code')
    if not code:
        return jsonify({'error': 'code is required'}), 400
    
    url = f'https://api.weixin.qq.com/sns/jscode2session?appid={APPID}&secret={SECRET}&js_code={code}&grant_type=authorization_code'
    response = requests.get(url)
    data = response.json()
    
    if 'openid' in data:
        return jsonify({'openid': data['openid']})
    else:
        return jsonify({'error': 'Failed to get openid'}), 400

if __name__ == '__main__':
    app.run(debug=True)

8.2.3 将 openid 用于支付请求

当你获取到 openid 后,可以在支付请求中使用它。

@app.route('/pay/unifiedorder', methods=['POST'])
def create_order():
    data = request.json
    openid = data.get('openid')
    order_id = generate_order_id()
    total_fee = data.get('total_fee')  # 单位:分

    order = wechatpay.order.create({
        'trade_type': 'JSAPI',
        'body': '商品描述',
        'total_fee': total_fee,
        'notify_url': config['notify_url'],
        'out_trade_no': order_id,
        'openid': openid,
    })

    return jsonify(order)

9、测试与上线

测试支付功能:在测试环境下进行全面测试,确保支付流程正确。
上线支付功能:测试无误后,将支付功能上线。
通过以上步骤,你可以将微信支付功能集成到你的Uni-App小程序中。如果遇到任何问题,可以参考微信支付的官方文档或寻求帮助。

标签:openid,code,微信,流程,支付,开通,data,order
From: https://www.cnblogs.com/lvdongjie/p/18340252

相关文章

  • 基于Java Springboot反诈科普微信小程序
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、软件领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于项目实战✌一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html......
  • SystemServer 进程的启动流程
    一、SystemServer 进程简介1. SystemServer进程主要的作用是启动各种系统服务,比如ActivityManagerService,PackageManagerService,WindowManagerService等各种服务。当我们的应用需要使用各种系统服务的时候也是通过与SystemServer进程通讯获取各种服......
  • 基于Java 毕业生就业管理微信小程序
    一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA/eclipse+微信开发者工具数据库:MySQL5.7数据库管理工具:Navica......
  • 基于Java 仓库点单微信小程序
    一、作品包含源码+数据库+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA/eclipse+微信开发者工具数据库:MySQL5.7数据库管理工具:Navicat10以上版本环境......
  • 基于Java Springboot门诊预约之鼻护灵微信小程序
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、软件领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于项目实战✌一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html......
  • 【用户案例】破局与超越:承德银行如何通过RPA重塑监管统计流程
    近年来,承德银行不断努力,力求在监管报表提交领域实现智能化转型。面对报表数据零散分布于多元业务系统、缺乏成熟数据仓库支持、以及依赖传统手工填报和自下而上的逐级上报流程等挑战,该行采取了一系列革新措施。这些措施包括:细致审视并强化报送流程中的薄弱点,深入剖析智能化报送障......
  • Java毕业设计基于微信小程序的加油站加油管理系统 uniApp
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,加油服务系统被用户普遍使用,为方......
  • 精品PPT | 微信云原生大数据平台构建及落地实践.pptx
    一、大数据上云概述1.为什么大数据要上云2.微信大数据平台架构演进二、大数据上云基础建设1.统一编排2.Pod设计及大数据配套能力3.计算组件云环境适配三、稳定性及效率提升1.K8S集群稳定性与弹性配额2.可观测性与智能运维......
  • 利用开源可视化报表工具进入流程化办公!
    很多客户朋友都希望能实现流程化办公,因为只有这样才能帮助企业顺利降本、增效、提质,利用好企业内部数据资源,打破信息孤岛壁垒,实现高效发展。低代码技术平台、开源可视化报表工具优势功能特点多,是提质高效的办公利器。了解行业趋势的朋友们都知道,数字化发展及流程化办公是发展潮流......
  • 微信小程序笔记完整总结,带你零基础速成微信小程序。
     ......