借助小程序云开发实现小程序支付功能(含源码),Java架构师成长路线

4,订单列表

5,微信支付与支付成功回调

支付成功给用户发送推送消息的功能会在后面讲解。

下面就来教大家如何借助云开发使用小程序支付功能。


支付所需要用到的配置信息

1,小程序appid

2,云开发环境id

3,微信商户号

4,商户密匙

一,准备工作


1,已经申请小程序,获取小程序 AppID 和 Secret 在小程序管理后台中,【设置】 →【开发设置】 下可以获取微信小程序 AppID 和 Secret。

2,微信支付商户号,获取商户号和商户密钥在微信支付商户管理平台中,【账户中心】→【商户信息】 下可以获取微信支付商户号。

在【账户中心】 ‒> 【API安全】 下可以设置商户密钥。

这里特殊说明下,个人小程序是没有办法使用微信支付的。所以如果想使用微信支付功能,必须是非个人账号(当然个人可以办个体户工商执照来注册非个人小程序账号)

3,微信开发者 IDE https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

4,开通小程序云开发功能:https://edu.csdn.net/course/play/9604/204526

二,商品列表的实现


效果图如下,由于本节重点是支付的实现,所以这里只简单贴出关键代码。

wxml布局如下:


<view class="container">

  <view class="good-item" wx:for="{{goods}}" wx:key="*this" ontap="getDetail" data-goodid="{{item._id}}">

    <view class="good-image">

      <image src="{{pic}}"></image>

    </view>

    <view class="good-detail">

      <view class="title">商品: {{item.name}}</view>

      <view class="content">价格: {{item.price / 100}} 元 </view>

      <button

        class="button"

        type="primary"

        bindtap="makeOrder"

        data-goodid="{{item._id}}"

      >下单</button>

    </view>

  </view>

</view>



我们所需要做的就是借助云开发获取云数据库里的商品信息,然后展示到商品列表,关于云开发获取商品列表并展示本节不做讲解(感兴趣的同学可以翻看我的历史博客,有写过的)

三,支付云函数的创建


首先看下我们支付云函数都包含那些内容

简单先讲解下每个的用处

config下的index.js是做支付配置用的,主要配置支付相关的账号信息

lib是用的第三方的支付库,这里不做讲解。

重点讲解的是云函数入口 index.js

下面就来教大家如何去配置

1,配置config下的index.js,

这一步所需要做的就是把小程序appid,云开发环境ID,商户id,商户密匙。填进去。

2,配置入口云函数

详细代码如下,代码里注释很清除了,这里不再做单独讲解:


const cloud = require('wx-server-sdk')

cloud.init()



const app = require('tcb-admin-node');

const pay = require('./lib/pay');

const {

 mpAppId,

 KEY

} = require('./config/index');

const {

 WXPayConstants,

 WXPayUtil

} = require('wx-js-utils');

const Res = require('./lib/res');

const ip = require('ip');



/**

 *

 * @param {obj} event

 * @param {string} event.type 功能类型

 * @param {} userInfo.openId 用户的openid

 */

exports.main = async function(event, context) {

 const {

  type,

  data,

  userInfo

 } = event;

 const wxContext = cloud.getWXContext()

 const openid = userInfo.openId;

 

 app.init();

 const db = app.database();

 const goodCollection = db.collection('goods');

 const orderCollection = db.collection('order');



 // 订单文档的status 0 未支付 1 已支付 2 已关闭

 switch (type) {

  // [在此处放置 unifiedorder 的相关代码]

  case 'unifiedorder':

   {

    // 查询该商品 ID 是否存在于数据库中,并将数据提取出来

    const goodId = data.goodId

    let goods = await goodCollection.doc(goodId).get();



    if (!goods.data.length) {

     return new Res({

      code: 1,

      message: '找不到商品'

     });

    }



    // 在云函数中提取数据,包括名称、价格才更合理安全,

    // 因为从端里传过来的商品数据都是不可靠的

    let good = goods.data[0];



    // 拼凑微信支付统一下单的参数

    const curTime = Date.now();

    const tradeNo = `${goodId}-${curTime}`;

    const body = good.name;

    const spbill_create_ip = ip.address() || '127.0.0.1';

    // 云函数暂不支付 http 触发器,因此这里回调 notify_url 可以先随便填。

    const notify_url = 'http://www.qq.com'; //'127.0.0.1';

    const total_fee = good.price;

    const time_stamp = '' + Math.ceil(Date.now() / 1000);

    const out_trade_no = `${tradeNo}`;

    const sign_type = WXPayConstants.SIGN_TYPE_MD5;



    let orderParam = {

     body,

     spbill_create_ip,

     notify_url,

     out_trade_no,

     total_fee,

     openid,

     trade_type: 'JSAPI',

     timeStamp: time_stamp,

    };



    // 调用 wx-js-utils 中的统一下单方法

    const {

     return_code,

     ...restData

    } = await pay.unifiedOrder(orderParam);



    let order_id = null;



    if (return_code === 'SUCCESS' && restData.result_code === 'SUCCESS') {

     const {

      prepay_id,

      nonce_str

     } = restData;



     // 微信小程序支付要单独进地签名,并返回给小程序端


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/24c5bf00e11d5421e3d611c753421a2f.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/d27cfe4c18d2d74e8af536cbeb957c2c.png)
![img](https://img-blog.csdnimg.cn/img_convert/1a2bc405359d54da7c9e15dec5e49e9a.png)
![img](https://img-blog.csdnimg.cn/img_convert/f4779d6ef8d47cc97f9124062566cbb1.png)
![img](https://img-blog.csdnimg.cn/img_convert/15ae7f5e4e9feefdb1d88271f4cbb1c6.png)
![img](https://img-blog.csdnimg.cn/img_convert/5cb71b0cfef5bf2a7366feeba697d973.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)**
![img](https://img-blog.csdnimg.cn/img_convert/8761336e284a708a30f95312a4014859.jpeg)



### 笔者福利

##### 以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。

**有了这个,面试踩雷?不存在的!**

##### 回馈粉丝,诚意满满!!!

![](https://img-blog.csdnimg.cn/img_convert/0c0be9d81e573637c4b0a422961da995.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/96ed2cb3d36da824e72144cf6c998c27.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/2e69721d4924a0d3c403048c175a3488.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/1bbeb9789b1b2924e007b5ec390f7c28.webp?x-oss-process=image/format,png)



**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/fa903fa128b0e4095ef8823b83bb5b41.jpeg)

技术还是HR的问题都有针对性的回答。

**有了这个,面试踩雷?不存在的!**

##### 回馈粉丝,诚意满满!!!

[外链图片转存中...(img-IyPgTcdT-1712704960893)]
[外链图片转存中...(img-7mNojeIF-1712704960894)]
[外链图片转存中...(img-XCrjDFJm-1712704960894)]
[外链图片转存中...(img-6DD6K1BS-1712704960894)]



**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-tbLL4BrH-1712704960895)]

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值