微信小程序支付功能的实现

article/2025/10/15 5:54:40

前言

最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出一辙,下面我就具体说一下小程序里微信支付的开发流程和注意点。

开始

第一步:开通微信支付和微信商户号

在这里插入图片描述

第二步,获得用户的openid

首页我们需要在小程序的客户端js中获取当前用户的openid,通过调用wx.login方法可以得到用户的code.

wx.login({success: function(res) {if (res.code) {//发起网络请求wx.request({url: 'https://yourwebsit/onLogin',method: 'POST',data: {code: res.code},success: function(res) {var openid = res.data.openid;},fail: function(err) {console.log(err)}})} else {console.log('获取用户登录态失败!' + res.errMsg)}}});

然后开发者服务器使用登录凭证 code 获取 openid。

var code = req.param("code");request({url: "https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code",method: 'GET'}, function(err, response, body) {if (!err && response.statusCode == 200) {res.json(JSON.parse(body));}});

第三步:获取prepay_id和支付签名验证paySign

这一步的过程就和服务号里的微信支付过程一样,分为客户端和服务器端

首先来看一下客户端js

在服务号里,我们是通过如下的代码来调起支付功能

function jsApiCall(){WeixinJSBridge.invoke('getBrandWCPayRequest',{"appId":"",   //公众号名称,由商户传入   "timeStamp":"",     //时间戳,自1970年以来的秒数   "nonceStr":"", //随机串   "package":"prepay_id=<%=prepay_id%>",   "signType":"MD5",     //微信签名方式:   "paySign":"<%=_paySignjs%>" //微信签名},function(res){WeixinJSBridge.log(res.err_msg);if( res.err_msg =="get_brand_wcpay_request:ok"){alert("支付成功!");}else{alert("支付失败!");}});}

在小程序里,我们是通过wx.requestPayment方法来调起支付功能,当然在这之前,我们先要获取prepay_id。

wx.request({url: 'https://yourwebsit/service/getPay', method: 'POST',data: {bookingNo:bookingNo, /*订单号*/total_fee:total_fee,  /*订单金额*/openid:openid},header: {'content-type': 'application/json'},success: function(res) {wx.requestPayment({//时间戳'timeStamp':timeStamp,'nonceStr': nonceStr, //随机串'package': 'prepay_id='+res.data.prepay_id, //配置支付id值'signType': 'MD5',//微信签名方式'paySign': res.data._paySignjs, //微信签名//成功后'success':function(res){ console.log(res);},'fail':function(res){console.log('fail:'+JSON.stringify(res));}})},fail: function(err) {console.log(err)}})

那在服务器端主要要实现的是prepay_id的获取和签名paySign

var bookingNo = req.param("bookingNo");var total_fee = req.param("total_fee");var openid = req.param("openid");var body = "费用说明";var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";var formData = "<xml>";formData += "<appid>appid</appid>"; //appidformData += "<attach>test</attach>";formData += "<body>" + body + "</body>";formData += "<mch_id>mch_id</mch_id>"; //商户号formData += "<nonce_str>nonce_str</nonce_str>";formData += "<notify_url>notify_url</notify_url>";formData += "<openid>" + openid + "</openid>";formData += "<out_trade_no>" + bookingNo + "</out_trade_no>";formData += "<spbill_create_ip>spbill_create_ip</spbill_create_ip>";formData += "<total_fee>" + total_fee + "</total_fee>";formData += "<trade_type>JSAPI</trade_type>";formData += "<sign>" + paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, spbill_create_ip, total_fee, 'JSAPI') + "</sign>";formData += "</xml>";request({url: url,method: 'POST',body: formData}, function(err, response, body) {if(!err && response.statusCode == 200) {var prepay_id = getXMLNodeValue('prepay_id', body.toString("utf-8"));var tmp = prepay_id.split('[');var tmp1 = tmp[2].split(']');//签名var _paySignjs = paysignjs(appid, mch_id, 'prepay_id=' + tmp1[0], 'MD5',timeStamp);var o = {prepay_id: tmp1[0],_paySignjs: _paySignjs}res.send(o);}});

第四步 调用这个函数

function paysignjs(appid, nonceStr, package, signType, timeStamp) {var ret = {appId: appid,nonceStr: nonceStr,package: package,signType: signType,timeStamp: timeStamp};var string = raw1(ret);string = string + '&key='+key;console.log(string);var crypto = require('crypto');return crypto.createHash('md5').update(string, 'utf8').digest('hex');
};function raw1(args) {var keys = Object.keys(args);keys = keys.sort()var newArgs = {};keys.forEach(function(key) {newArgs[key] = args[key];});var string = '';for(var k in newArgs) {string += '&' + k + '=' + newArgs[k];}string = string.substr(1);return string;
};function paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type) {var ret = {appid: appid,attach: attach,body: body,mch_id: mch_id,nonce_str: nonce_str,notify_url: notify_url,openid: openid,out_trade_no: out_trade_no,spbill_create_ip: spbill_create_ip,total_fee: total_fee,trade_type: trade_type};var string = raw(ret);string = string + '&key='+key;var crypto = require('crypto');return crypto.createHash('md5').update(string, 'utf8').digest('hex');
};function raw(args) {var keys = Object.keys(args);keys = keys.sort()var newArgs = {};keys.forEach(function(key) {newArgs[key.toLowerCase()] = args[key];});var string = '';for(var k in newArgs) {string += '&' + k + '=' + newArgs[k];}string = string.substr(1);return string;
};function getXMLNodeValue(node_name, xml) {var tmp = xml.split("<" + node_name + ">");var _tmp = tmp[1].split("</" + node_name + ">");return _tmp[0];
}

这样简单3步,小程序的微信支付功能就接上了,下面是测试的支付效果图
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/GPaZWwqm.shtml

相关文章

微信小程序前端微信支付功能 支付流程

小程序支付&#xff08;纯前端&#xff09; 前提&#xff08;实现微信小程序支付功能需要appid主体为企业&#xff0c;以及开通了微信商家服务的小程序才能实现&#xff0c;个人小程序是无法实现这个功能的&#xff09; 前期准备&#xff1a; 1.开通了微信支付&#xff0c;并…

微信小程序接入支付功能并实现支付

随着微信小程序越来越广泛的应用,现在小程序几乎无所不能(绝对啦,哈哈),那么就会有很多微信小程序需要有支付的需求,那么该文章将带领大家走一遍如何实现微信小程序的支付功能. 第一步,微信小程序管理后台 -> 微信支付->接入微信支付 及关联(设置)商户信息 如果是第一次…

软件测试之“支付功能”测试

测试思维 要分析测试点之前&#xff0c;我们先来梳理一下测试思维。总结来说&#xff0c;任何事物的测试思路都可以总结如下&#xff1a; 第一步&#xff1a;梳理产品的核心业务流程&#xff1a;明白这是个什么项目&#xff0c;实现了什么业务&#xff0c;以及是怎么实现的&a…

一步步教你如何在SpringBoot项目中引入支付功能

听说微信搜索《Java鱼仔》会变更强哦&#xff01; 本文收录于JavaStarter &#xff0c;里面有我完整的Java系列文章&#xff0c;学习或面试都可以看看哦 &#xff08;一&#xff09;引言 支付功能如今已经成为一个需要盈利的网站的基本功能了&#xff0c;如今的网站如果想要做…

支付功能怎么测试?

跳槽高峰期&#xff0c;作为测试&#xff0c;不管是面试还是笔试&#xff0c;必然要被考验到的就是”测试思维“。在面试中就是体现在如下面试题中&#xff1a; “说说你项目中的 xx 模块你是如何测试的&#xff1f;” “给你一个购物车&#xff0c;你要怎么测试&#xff1f;”…

面试题:支付功能怎么测试?如何回答?

文章末尾给大家准备了大量福利 前言 九月了&#xff0c;有很多的小伙伴已经全面武装好准备找工作了&#xff0c;九月和十月是黄金期——俗称”金九银十“。那么&#xff0c;作为测试&#xff0c;不管是面试还是笔试&#xff0c;必然要被考验到的就是”测试思维“。在面试中就…

支付功能测试用例(参考微信平台)

支付功能测试用例xmind&#xff0c;功能点以支付方式&#xff0c;支付手段&#xff0c;支付金额划分的 支付方式&#xff1a; 1.余额&#xff08;零钱&#xff09;支付 2.储蓄卡支付 3.第三方支付微信&#xff0c;支付宝&#xff0c;京东、百度、&#xff09; 4.信用卡支付…

vue项目支付功能

目录 1.支付宝方式&#xff1a; 代码&#xff1a; ​ 2.微信支付 二维码展示代码&#xff1a; ​请求后端的支付二维码接口 1.支付宝方式&#xff1a; 支付宝方式&#xff1a;点击支付宝支付, 调用后台接口(携带订单号)&#xff0c;后台返回一个form表单(HTML字符串结构)&am…

在线支付功能实现代码

我们都知道&#xff0c;在现在的网站中&#xff0c;基本上都会有支付功能&#xff0c;在线支付作为一个潮流已是现代化网站的必备功能模块&#xff0c;那么几天我就分享一下如果来做这个在线支付功能。 在线支付一般来说有两种实现方式&#xff0c;一种是调用各个银行提供的接口…

Java实现微信支付功能

微信实现支付功能与支付宝实现支付功能是相似的&#xff0c;接入前的准备工作&#xff0c;包括申请APPID、申请mchid、绑定APPID及mchid、配置API key、下载并配置商户证书等&#xff0c;具体可查看微信支付文档 接入前准备-APP支付 | 微信支付商户平台文档中心 (qq.com)正在上…

Java开发支付宝支付功能

之前做开发过程中&#xff0c;没有接触过支付相关的功能&#xff0c;最近做了一个支付相关功能的开发&#xff0c;包括支付宝和微信支付&#xff0c;为了避免以后忘记相关的流程&#xff0c;记录一下这次的开发经验&#xff0c;这里先介绍一下支付宝相关的开发。 首先在进行jav…

支付宝支付功能实现

支付宝支付功能 1、电脑网站支付&#xff0c;手机网站支付&#xff0c;app支付1.1、异步通知介绍1.2、API和请求示例介绍 2、当面付3、小程序支付接入4、代码完整代码 支付宝开发文档中心 注意&#xff1a;个人无法使用此功能&#xff0c;因为个人申请使用是不会通过的 1、电脑…

支付功能

Django rest framework之支付功能 一.支付宝支付 1.进入蚂蚁金服开放平台&#xff08;查看api&#xff09;&#xff1a; 1.1在正式生产环境中需要创建应用&#xff08;需审核&#xff09;&#xff1a; 1.2沙箱环境&#xff08;测试&#xff09;&#xff1a; 可以在文档中查看对…

springboot实现支付宝支付功能

支付系统中容易出现的问题 1&#xff0c;用户在页面下订单后&#xff0c;价格被篡改&#xff1b; 解决方案&#xff1a;通过后端计算订单的总金额 2&#xff0c;订单重复处理。用户支付成功后&#xff0c;支付宝会短时间内多次调用我们的回调接口&#xff0c;如果出现网络波动…

2021年,Flutter 与 React Native该如何选择?,安卓app开发教程

一、Flutter 应用的优势 =========================================================================== 1. 热重载 = 快速编码 Flutter 允许开发人员使用一种更复杂、更快速的方式来创建应用程序。这是 Flutter 的最大优势之一,也是所有顶级移动应用开发公司都颇为看重的…

一大波开发者福利来了,一份微软官方Github上发布的开源项目清单等你签收

目录 微软Github开源项目入口微软开源项目受欢迎程度排名 Visual Studio CodeTypeScriptRxJS.NET Core 基础类库CNTKMicrosoft calculatorMonaco editorMS-DOSRedis windows版.NET Core CLR (公共语言运行时)ASP.NET CoreEntity Framework CorePowerShell如何在其中搜索自己需要…

.Net资讯 | 一大波开发者福利来了, 一份微软官方Github上发布的开源项目清单等你签收...

目录 微软Github开源项目入口微软开源项目受欢迎程度排名 Visual Studio CodeTypeScriptRxJS.NET Core 基础类库CNTKMicrosoft calculatorMonaco editorMS-DOSRedis windows版.NET Core CLR (公共语言运行时)ASP.NET CoreEntity Framework CorePowerShell如何在其中搜索自己需要…

FullCalendar:eventColor,eventBackgroundColor, eventBorderColor, and eventTextColor

<!DOCTYPE html><html><head><meta charsetutf-8 /><title>背景色設定</title><link href../fullcalendar.min.css relstylesheet /><link href../fullcalendar.print.min.css relstylesheet mediaprint /><script src../l…

Flutter 与 React Native 该如何选择

跨平台程序员之间关于 React Native 和 Flutter 的旷日持久的争论越来越白热化了。前几年&#xff0c;React Native 还是开发人员的首选框架&#xff0c;但是自 2017 年 Flutter 发布以来&#xff0c;其已经发展成为 React Native 的一个强有力竞争对手。 最近&#xff0c;随着…

2021年,Flutter 与 React Native该如何选择?

????????关注后回复 “进群” &#xff0c;拉你进程序员交流群???????? 作者 | Wasim Charoliya 译者 | 王强 策划 | 田晓旭 2021 年&#xff0c;跨平台程序员之间关于 React Native 和 Flutter 的旷日持久的争论越来越白热化了。前几年&#xff0c;React Nati…