123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- // 必须传入price,show tradeNo
- // bind:payResult 返回支付状态
- const CONFIG = require("../../config.js");
- const Parse = getApp().Parse;
- const company = getApp().globalData.company;
- Component({
- behaviors: [],
- properties: {
- show: {
- type: Boolean,
- value: false,
- },
- //支付价格 *必填
- price: {
- type: Number,
- value: 0,
- },
- //订单id Order表创建后id
- orderId: {
- type: String,
- },
- //支付类型
- orderType: {
- type: String,
- value: 'shopgoods'
- },
- //订单编号 *必填
- tradeNo: {
- type: String,
- },
- //显示公益金支付 Profile — bonus字段
- showBonus: {
- type: Boolean,
- value: false
- },
- //显示支付类型
- showType: {
- type: String,
- value: 'all'
- },
- profileId: {
- type: String
- }
- },
- data: {
- radio: "wxpay",
- isPay: false,
- balanceTitle:CONFIG.default.payBalanceTitle || '余额'
- },
- lifetimes: {
- created() {
- },
- attached() {},
- moved() {},
- detached() {},
- },
- pageLifetimes: {
- show: async function () {
- // 页面显示
- },
- hide: function () {
- // 页面被隐藏
- this.setData({
- show: false,
- });
- },
- resize: function (size) {
- // 页面尺寸变化
- },
- },
- methods: {
- onChange(event) {
- console.log(event)
- this.setData({
- radio: event.detail,
- });
- console.log(this.data.radio);
- },
- onClickHide() {
- this.setData({
- show: false
- });
- this.payResult("Cancel the payment", undefined);
- },
- /* 支付结果返回父组件 */
- payResult(state, no) {
- let {
- radio
- } = this.data
- this.triggerEvent("payResult", {
- params: state,
- no: no,
- type: radio
- });
- },
- pay() {
- if (this.data.isPay) {
- wx.showToast({
- title: '你已支付,请勿重复提交',
- icon: "none"
- })
- return
- }
- let payType = this.data.radio;
- switch (payType) {
- case "wxpay":
- console.log(this.properties.tradeNo)
- this.wxPay();
- break;
- case "balance":
- this.balance();
- break;
- case "bonus":
- this.bonusPay();
- break;
- case "offline":
- break;
- }
- },
- async wxPay() {
- let that = this;
- let Account = new Parse.Query("Account");
- Account.equalTo("user", Parse.User.current().id);
- Account.equalTo("company", company);
- let account = await Account.first();
- let AccountLog = Parse.Object.extend("AccountLog");
- let accountLog = new AccountLog();
- accountLog.set("assetType", "wxPay");
- accountLog.set("payType", "wxpay-wxapp");
- accountLog.set("assetCount", this.data.price);
- accountLog.set("desc", "微信支付");
- accountLog.set("orderType", this.data.orderType + "-wxpay");
- accountLog.set("orderNumber", this.properties.tradeNo);
- if (this.properties.orderId) accountLog.set("orderId", this.properties.orderId)
- accountLog.set("isVerified", false);
- accountLog.set("targetName", "system");
- if (account) {
- accountLog.set("fromAccount", account.toPointer());
- }
- accountLog.set("fromName", Parse.User.current().get("nickname"));
- accountLog.set("company", {
- __type: "Pointer",
- className: "Company",
- objectId: company,
- });
- let appId = getApp().globalData.appid;
- let openId = wx.getStorageSync("userInfo").openid;
- if(!openId && Parse.User.current().get("wxapp")){
- openId = Parse.User.current().get("wxapp")?.[appId]?.openid
- }
- let goodsTotalPrice = this.data.price;
- console.log(goodsTotalPrice)
- if(goodsTotalPrice == 0){
- this.updateLog(accountLog)
- return
- }
- wx.request({
- method: "POST",
- url: "https://server.fmode.cn/api/wxpay/neworder",
- data: {
- appid: appId,
- openid: openId,
- out_trade_no: that.properties.tradeNo,
- total_fee: goodsTotalPrice,
- company: company
- },
- success: (payres) => {
- console.log("Pay Params");
- console.log(payres);
- let payinfo = payres.data;
- wx.requestPayment({
- appId: appId,
- timeStamp: payinfo.timeStamp,
- nonceStr: payinfo.nonceStr,
- package: payinfo.package,
- signType: "MD5",
- paySign: payinfo.paySign,
- async success(data) {
- that.updateLog(accountLog)
- wx.showToast({
- title: "支付成功",
- icon: "success",
- duration: 1500,
- });
- that.setData({
- show: false
- })
- },
- fail(err) {
- that.payResult(err, that.properties.tradeNo);
- wx.showToast({
- title: "支付失败",
- icon: "error",
- duration: 1500,
- });
- },
- complete:(data) => {
- console.log(111,data)
- }
- });
- },
- fail: (err) => {
- wx.showToast({
- title: "支付失败",
- icon: "error",
- duration: 1500,
- });
- return false;
- },
-
- });
- },
- //支付成功更新log
- async updateLog(accountLog){
- this.payResult("ok", this.properties.tradeNo);
- accountLog.set("isVerified", true);
- await accountLog.save()
- },
- async sendOrder(tradeNo) {
- let that = this;
- let DramaOrderLog = Parse.Object.extend("UserAgentOrder");
- let current = Parse.User.current();
- let dramaOrderLog = new DramaOrderLog();
- dramaOrderLog.set("user", {
- __type: "Pointer",
- className: "_User",
- objectId: current.id,
- });
- dramaOrderLog.set("orderId", tradeNo);
- dramaOrderLog.set("company", {
- __type: "Pointer",
- className: "Company",
- objectId: getApp().globalData.company,
- });
- await dramaOrderLog.save();
- },
- async balance() {
- let { balanceTitle } = this.data
- let _this = this;
- try {
- let price = this.data.price
- let Account = new Parse.Query("Account");
- Account.equalTo("user", Parse.User.current().id);
- Account.equalTo("company", company);
- let account = await Account.first();
- console.log(account);
- if (!account.get("balance") || price > account.get("balance")) {
- wx.showToast({
- title: `${balanceTitle == '积分' ? '积分不足' : '余额不足,请充值'}`,
- icon: "none"
- })
- return
- }
- let AccountLog = Parse.Object.extend("AccountLog");
- let accountLog = new AccountLog();
- accountLog.set("assetType", "balance");
- accountLog.set("payType", "balance");
- accountLog.set("assetCount", this.data.price);
- accountLog.set("desc", `${balanceTitle}支付`);
- accountLog.set("orderType", this.data.orderType + "-balance");
- accountLog.set("orderNumber", this.properties.tradeNo);
- if (this.properties.orderId) accountLog.set("orderId", this.properties.orderId)
- accountLog.set("isVerified", false);
- accountLog.set("targetName", "system");
- if (account) {
- accountLog.set("fromAccount", account.toPointer());
- }
- accountLog.set("fromName", Parse.User.current().get("nickname"));
- accountLog.set("company", {
- __type: "Pointer",
- className: "Company",
- objectId: company,
- });
- accountLog.save()
- .then((res) => {
- res.set("isVerified", true);
- res.save().then((result) => {
- console.log(result)
- wx.showToast({
- title: "支付成功",
- icon: "success",
- duration: 1500,
- });
- _this.payResult("ok", this.properties.tradeNo);
- })
- })
- } catch (error) {
- console.log(error)
- wx.showToast({
- title: "支付失败",
- icon: "error",
- duration: 1500,
- });
- _this.payResult(error);
- }
- this.setData({
- isPay: true
- })
- },
- //公益金支付
- async bonusPay() {
- let _this = this;
- let {
- profileId
- } = this.data
- try {
- let data = await this.customSQL()
- console.log(data);
- if (data.code == 200) {
- let Account = new Parse.Query("Account");
- Account.equalTo("user", Parse.User.current().id);
- Account.equalTo("company", company);
- let account = await Account.first();
- let AccountLog = Parse.Object.extend("AccountLog");
- let accountLog = new AccountLog();
- accountLog.set("assetType", "bonus");
- accountLog.set("payType", "bonus");
- accountLog.set("assetCount", this.data.price);
- accountLog.set("desc", "公益金支付");
- accountLog.set("orderType", this.data.orderType + "-bonus");
- accountLog.set("orderNumber", this.properties.tradeNo);
- if (this.properties.orderId) accountLog.set("orderId", this.properties.orderId)
- accountLog.set("isVerified", true);
- accountLog.set("targetName", "system");
- if (!profileId && account) {
- accountLog.set("fromAccount", account.toPointer());
- }
- accountLog.set("fromName", Parse.User.current().get("nickname"));
- accountLog.set("company", {
- __type: "Pointer",
- className: "Company",
- objectId: company,
- });
- await accountLog.save()
- wx.showToast({
- title: data.msg,
- icon: 'none',
- image: '',
- duration: 1500,
- mask: false,
- });
- _this.payResult("ok", this.properties.tradeNo);
- }else{
- wx.showToast({
- title: data.msg,
- icon: 'none',
- image: '',
- duration: 1500,
- mask: false,
- });
- }
- } catch (err) {
- console.log(err)
- wx.showToast({
- title: "支付失败",
- icon: "error",
- duration: 1500,
- });
- _this.payResult(error);
- }
- },
- async customSQL() {
- let price = this.data.price
- let {
- profileId
- } = this.data
- let promise = await new Promise((resolve, rej) => {
- wx.request({
- url: "https://server.fmode.cn/api/food/bonus",
- data: {
- pid: profileId,
- price: price,
- company: company
- },
- method: "POST",
- success(data) {
- console.log(data);
- resolve(data.data)
- },
- fail(err) {
- rej(err);
- },
- });
- });
- return promise;
- },
- },
- observers: {
- show: function (show) {
- console.log(show)
- }
- }
- });
|