日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小程序云开发搜索功能的实现正则_码code | 如何借助小程序云开发实现小程序支付功能...

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小程序云开发搜索功能的实现正则_码code | 如何借助小程序云开发实现小程序支付功能... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載來源:編程小石頭

我們在做小程序支付相關的開發時,總會遇到這些難題。小程序調用微信支付時,必須要有自己的服務器,有自己的備案域名,有自己的后臺開發。這就導致我們做小程序支付時的成本很大。

本節就來教大家如何使用小程序·云開發實現小程序支付功能的開發。不用搭建自己的服務器,不用有自己的備案域名。只需要簡簡單單的使用小程序·云開發。

(小程序支付效果圖)

本節知識點

1,云開發的部署和使用
2,支付相關的云函數開發
3,商品列表
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布局如下:

class="container">

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

? ?class="good-image">

? ? ?"{{pic}}">

? ?class="good-detail">

? ? ?class="title">商品: {{item.name}}

? ? ?class="content">價格:{{item.price / 100}} 元

? ? ? ?class="button"

? ? ? ?type="primary"

? ? ? ?bindtap="makeOrder"

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

? ? ?>下單

?</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; ? ? // 微信小程序支付要單獨進地簽名,并返回給小程序端

? ? const sign = WXPayUtil.generateSignature({ ? ? ?appId: mpAppId, ? ? ?nonceStr: nonce_str, ? ? ?package: `prepay_id=${prepay_id}`, ? ? ?signType: 'MD5', ? ? ?timeStamp: time_stamp

? ? }, KEY); ? ? let orderData = {

? ? ?out_trade_no,

? ? ?time_stamp,

? ? ?nonce_str,

? ? ?sign,

? ? ?sign_type,

? ? ?body,

? ? ?total_fee,

? ? ?prepay_id,

? ? ?sign, ? ? ?status: 0, // 訂單文檔的status 0 未支付 1 已支付 2 已關閉

? ? ?_openid: openid,

? ? }; ? ? let order = await orderCollection.add(orderData);

? ? order_id = order.id;

? ?} ? ?return new Res({ ? ? code: return_code === 'SUCCESS' ? 0 : 1, ? ? data: {

? ? ?out_trade_no,

? ? ?time_stamp,

? ? ?order_id,

? ? ?...restData

? ? }

? ?});

? } ? // [在此處放置 payorder 的相關代碼]

?case 'payorder':

? { ? ?// 從端里出來相關的訂單相信

? ?const {

? ? out_trade_no,

? ? prepay_id,

? ? body,

? ? total_fee

? ?} = data; ? ?// 到微信支付側查詢是否存在該訂單,并查詢訂單狀態,看看是否已經支付成功了。

? ?const {

? ? return_code,

? ? ...restData

? ?} = await pay.orderQuery({

? ? out_trade_no

? ?}); ? ?// 若訂單存在并支付成功,則開始處理支付

? ?if (restData.trade_state === 'SUCCESS') { ? ? let result = await orderCollection

? ? ?.where({

? ? ? out_trade_no

? ? ?})

? ? ?.update({ ? ? ? status: 1, ? ? ? trade_state: restData.trade_state, ? ? ? trade_state_desc: restData.trade_state_desc

? ? ?}); ? ? let curDate = new Date(); ? ? let time = `${curDate.getFullYear()}-${curDate.getMonth() + ? ? ? ? ?1}-${curDate.getDate()} ${curDate.getHours()}:${curDate.getMinutes()}:${curDate.getSeconds()}`;

? ?} ? ?return new Res({ ? ? code: return_code === 'SUCCESS' ? 0 : 1, ? ? data: restData

? ?});

? } ?case 'orderquery':

? { ? ?const {

? ? transaction_id,

? ? out_trade_no

? ?} = data; ? ?// 查詢訂單

? ?const { ? ? data: dbData

? ?} = await orderCollection

? ?.where({

? ? out_trade_no

? ?})

? ?.get(); ? ?const {

? ? return_code,

? ? ...restData

? ?} = await pay.orderQuery({

? ? transaction_id,

? ? out_trade_no

? ?}); ? ?return new Res({ ? ? code: return_code === 'SUCCESS' ? 0 : 1, ? ? data: { ...restData,

? ? ?...dbData[0]

? ? }

? ?});

? } ?case 'closeorder':

? { ? ?// 關閉訂單

? ?const {

? ? out_trade_no

? ?} = data; ? ?const {

? ? return_code,

? ? ...restData

? ?} = await pay.closeOrder({

? ? out_trade_no

? ?}); ? ?if (return_code === 'SUCCESS' &&

? ? restData.result_code === 'SUCCESS') { ? ? await orderCollection

? ? ?.where({

? ? ? out_trade_no

? ? ?})

? ? ?.update({ ? ? ? status: 2, ? ? ? trade_state: 'CLOSED', ? ? ? trade_state_desc: '訂單已關閉'

? ? ?});

? ?} ? ?return new Res({ ? ? code: return_code === 'SUCCESS' ? 0 : 1, ? ? data: restData

? ?});

? }

}

}

其實我們支付的關鍵功能都在上面這些代碼里面了。

再來看下,支付的相關流程截圖:

上圖就涉及到了我們的訂單列表,支付狀態,支付成功后的回調。其實支付的其他功能,比如支付成功后的消息推送也是可以借助云開發實現的,歡迎大家自己動手去嘗試。

如果你想學習小程序·云開發,歡迎掃碼進群,這周四晚將進行《小程序·云開發實戰:從0到1快速開發電商小程序》的直播課程分享。

推薦閱讀:

總結

以上是生活随笔為你收集整理的小程序云开发搜索功能的实现正则_码code | 如何借助小程序云开发实现小程序支付功能...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久夜夜夜 | 天天干夜夜草 | 亚洲大片在线观看 | 午夜国产在线视频 | 日本国产精品 | 东京热加勒比无码少妇 | www.天天操.com| 欧美巨乳在线 | 色吊妞| 亚洲精品乱码久久久久久蜜桃91 | 久久久久一区二区精码av少妇 | 九九九在线视频 | 尤物视频在线观看国产 | 拍摄av现场失控高潮数次 | 国产视频久久久久 | 国产,日韩,欧美 | 操女人免费视频 | 五十路息子| 日本不卡不卡 | 偷拍亚洲欧美 | 99久久久国产精品免费蜜臀 | 丰满熟女人妻一区二区三区 | 牛牛热在线视频 | 蜜桃成人在线视频 | 性久久久久 | 国产一区二区三区日韩 | 在线一级片 | 中文字幕影片免费在线观看 | 涩涩视频网址 | 午夜视频成人 | 精品国产午夜福利在线观看 | 97高清国语自产拍 | 精品一区免费观看 | 久久99精品久久久久婷婷 | 爱的色放韩国电影 | www.色黄| 91在线免费视频 | 日韩成人在线播放 | 波多野结衣在线观看一区二区 | 四季av中文字幕一区 | 在线v| 国产农村妇女精品一区 | 偷拍视频一区 | 国产91精品久久久 | 91情侣在线 | 精品影视 | 91精品久久久久久久 | 最新中文在线视频 | 一起操网站 | av在线网址观看 | 毛片视频网址 | 欧美视频黄色 | 豆国产97在线 | 亚洲 | 在线免费av网址 | 欧美成人免费观看 | 日韩成人无码影院 | 日本不卡一区二区三区视频 | 亚洲精品成人久久 | 一本av在线| 亚洲人成无码www久久久 | 精品国产三级片在线观看 | 色在线免费视频 | 91蝌蚪视频在线观看 | 日韩免费av片 | 国产91清纯白嫩初高中在线观看 | 天堂中文字幕av | 在线亚洲欧美 | 久青草视频在线观看 | 国产性―交―乱―色―情人 | 国产少女免费观看高清 | 无码人妻aⅴ一区二区三区玉蒲团 | 黄色片在线免费观看视频 | 日本阿v视频在线观看 | 麻豆系列| 国产精品久久久久久一区 | 91亚洲国产成人精品性色 | 一区二区三区免费观看视频 | 国产在线观看免费视频软件 | 日韩爱爱免费视频 | 人妻丰满熟妇无码区免费 | 四虎免费久久 | 成人午夜福利一区二区 | 日韩精品在线免费观看视频 | 久久久国产成人一区二区三区 | www.操com| 国产欧美一区二区三区精华液好吗 | 51啪影院 | 日韩精品福利在线 | 午夜性福利视频 | 麻豆黄色一级片 | 污污在线免费观看 | 国产 一二三四五六 | 精品无码一区二区三区 | 深爱综合网 | 日韩亚洲在线观看 | 可以免费观看的毛片 | 色涩综合 | 欧美黄色短片 | 亚洲AV无码成人精品区明星换面 |