Browse Source

H5支持微信支付

zyh
Gaoxs 4 years ago
parent
commit
12238a98d6
  1. 1
      libs/order.js
  2. 38
      libs/wechat.js
  3. 2
      main.js
  4. 7
      manifest.json
  5. 180
      pages/shop/GoodsCon/index.vue
  6. 9
      pages/user/address/AddAddress/index.vue
  7. 5
      utils/index.js

1
libs/order.js

@ -141,6 +141,7 @@ export function handleOrderPayResults(data, type) {
break;
// APP支付
case "WECHAT_APP_PAY":
weappPay(data.result.jsConfig).finally(() => {
goOrderDetails(data.result.orderId, type)
});

38
libs/wechat.js

@ -1,8 +1,38 @@
import { getProvider } from "@/utils";
import WechatJSSDK from "wechat-jssdk/dist/client.umd";
import { getWechatConfig, wechatAuth } from "@/api/public";
import { parseQuery } from "@/utils";
import cookie from "@/utils/store/cookie";
import store from "@/store";
import dayjs from "dayjs";
// 支付模块
export const weappPay = (option) => {
return new Promise((resolve, reject) => {
console.log(option)
if (store.state.$deviceType == 'weixinh5') {
setTimeout(() => {
location.href = option.mweb_url;
}, 100);
resolve()
return
}
if (store.state.$deviceType == 'weixin') {
pay(option).then(() => {
uni.showToast({
title: '支付成功', icon: 'success', duration: 5000,
});
resolve()
})
.finally(res => {
//if(typeof(res) == "undefined") return
})
.catch(function () {
uni.showToast({ title: '支付失败', icon: 'none', duration: 5000 });
reject()
});
return
}
// 吊起微信支付
// getProvider('payment').then(provider => {
let orderInfo = {
@ -44,13 +74,6 @@ export const weappPay = (option) => {
import WechatJSSDK from "wechat-jssdk/dist/client.umd";
import { getWechatConfig, wechatAuth } from "@/api/public";
import { parseQuery } from "@/utils";
import cookie from "@/utils/store/cookie";
import store from "@/store";
import dayjs from "dayjs";
const STATE_KEY = "wx_authorize_state";
const WX_AUTH = "wx_auth";
const BACK_URL = "login_back_url";
@ -178,6 +201,7 @@ function toPromise(fn, config = {}) {
}
export function pay(config) {
console.log(instance)
return toPromise(instance.chooseWXPay, config);
}

2
main.js

@ -104,7 +104,7 @@ import { isWeixin } from '@/utils'
if (isWeixin()) {
Vue.prototype.$deviceType = 'weixin'
store.commit('updateDevicetype', 'weixin')
// wechat().then(() => oAuth());
wechat().then(() => oAuth());
} else {
Vue.prototype.$deviceType = 'weixinh5'
store.commit('updateDevicetype', 'weixinh5')

7
manifest.json

@ -157,6 +157,13 @@
},
"router" : {
"mode" : "history"
},
"sdkConfigs" : {
"maps" : {
"qqmap" : {
"key" : ""
}
}
}
}
}

180
pages/shop/GoodsCon/index.vue

@ -197,16 +197,16 @@ import {
getProductDetail,
postCartAdd,
getCartCount,
getProductCode
getProductCode,
} from "@/api/store";
import {
getCoupon,
getCollectAdd,
getCollectDel,
getUserInfo
getUserInfo,
} from "@/api/user";
import { isWeixin, PosterCanvas, handleQrCode } from "@/utils";
// import { wechatEvevt } from "@/libs/wechat";
import { wechatEvevt } from "@/libs/wechat";
import { imageBase64 } from "@/api/public";
import { mapGetters } from "vuex";
@ -220,9 +220,9 @@ export default {
CouponPop,
ProductWindow,
StorePoster,
ShareInfo
ShareInfo,
},
data: function() {
data: function () {
return {
shareInfoStatus: false,
weixinStatus: false,
@ -232,18 +232,18 @@ export default {
image: "",
title: "",
price: "",
code: ""
code: "",
},
posterImageStatus: false,
animated: false,
coupon: {
coupon: false,
list: []
list: [],
},
attr: {
cartAttr: false,
productAttr: [],
productSelect: {}
productSelect: {},
},
isOpen: false, //
productValue: [],
@ -263,23 +263,23 @@ export default {
swiperRecommend: {
pagination: {
el: ".swiper-pagination",
clickable: true
clickable: true,
},
autoplay: false,
loop: false,
speed: 1000,
observer: true,
observeParents: true
observeParents: true,
},
goodList: [],
systemStore: {},
qqmapsdk: null,
productConClass: "product-con",
tempName: "全国包邮"
tempName: "全国包邮",
};
},
computed: mapGetters(["isLogin", "location"]),
mounted: function() {
mounted: function () {
let url = handleQrCode();
if (url && url.productId) {
this.id = url.productId;
@ -287,6 +287,7 @@ export default {
this.id = this._route.query.id;
}
this.productCon();
this.setOpenShare();
},
watch: {
posterImageStatus(status) {
@ -296,7 +297,7 @@ export default {
} else {
this.productConClass = "product-con";
}
}
},
},
methods: {
goShoppingCart() {
@ -304,48 +305,48 @@ export default {
},
goCustomerList() {
this.$yrouter.push({
path: "/pages/user/CustomerList/index"
path: "/pages/user/CustomerList/index",
});
},
goStoreList() {
this.$yrouter.push({
path: "/pages/shop/StoreList/index"
path: "/pages/shop/StoreList/index",
});
},
goEvaluateList(id) {
this.$yrouter.push({
path: "/pages/shop/EvaluateList/index",
query: {
id
}
id,
},
});
},
showChang: function(data) {
showChang: function (data) {
this.$yrouter.push({
path: "/pages/map/index",
query: data
query: data,
});
},
updateTitle() {
// document.title = this.storeInfo.storeName || this.$yroute.meta.title;
},
setShareInfoStatus: function() {
setShareInfoStatus: function () {
this.shareInfoStatus = !this.shareInfoStatus;
this.posters = false;
},
shareCode: function() {
shareCode: function () {
var that = this;
getProductCode(that.id).then(res => {
getProductCode(that.id).then((res) => {
that.posterData.code = res.data.code;
that.listenerActionSheet();
});
},
setPosterImageStatus: function() {
setPosterImageStatus: function () {
this.posterImageStatus = !this.posterImageStatus;
this.posters = false;
},
//
productCon: function() {
productCon: function () {
let that = this;
let from = this.location;
if (this.$deviceType == "app") {
@ -353,7 +354,7 @@ export default {
}
uni.showLoading({ title: "加载中", mask: true });
getProductDetail(that.id, from)
.then(res => {
.then((res) => {
res.data.storeInfo.description = res.data.storeInfo.description.replace(
/\<img/gi,
'<img style="max-width:100%;height:auto;"'
@ -385,7 +386,7 @@ export default {
var list = good_list.slice(i * 6, 6);
if (list.length)
goodArray.push({
list: list
list: list,
});
}
that.mapKay = res.data.mapKay;
@ -394,12 +395,12 @@ export default {
that.DefaultSelect();
that.getCartCount();
})
.catch(err => {
.catch((err) => {
uni.showToast({
title:
err.msg || err.response.data.msg || err.response.data.message,
icon: "none",
duration: 2000
duration: 2000,
});
})
.finally(() => {
@ -407,7 +408,7 @@ export default {
});
},
//
DefaultSelect: function() {
DefaultSelect: function () {
let productAttr = this.attr.productAttr;
let value = [];
for (let i = 0; i < productAttr.length; i++) {
@ -462,7 +463,7 @@ export default {
}
},
//
ChangeCartNum: function(changeValue) {
ChangeCartNum: function (changeValue) {
//changeValue: |
//
let productSelect = this.productValue[this.attrValue];
@ -495,52 +496,52 @@ export default {
}
},
//
changeFun: function(opt) {
changeFun: function (opt) {
if (typeof opt !== "object") opt = {};
let action = opt.action || "";
let value = opt.value === undefined ? "" : opt.value;
this[action] && this[action](value);
},
//
couponTap: function() {
couponTap: function () {
let that = this;
that.coupons();
that.coupon.coupon = true;
},
changecoupon: function(msg) {
changecoupon: function (msg) {
this.coupon.coupon = msg;
this.coupons();
},
currentcoupon: function(res) {
currentcoupon: function (res) {
let that = this;
that.coupon.coupon = false;
that.$set(that.coupon.list[res], "is_use", true);
},
//
coupons: function() {
coupons: function () {
let that = this,
q = {
page: 1,
limit: 20
limit: 20,
};
getCoupon(q).then(res => {
getCoupon(q).then((res) => {
that.$set(that, "couponList", res.data || []);
that.$set(that.coupon, "list", res.data);
});
},
//
selecAttrTap: function() {
selecAttrTap: function () {
this.attr.cartAttr = true;
this.isOpen = true;
},
changeattr: function(msg) {
changeattr: function (msg) {
//
console.log(msg);
this.attr.cartAttr = msg;
this.isOpen = false;
},
//
ChangeAttr: function(res) {
ChangeAttr: function (res) {
//
console.log(res);
let productSelect = this.productValue[res.value];
@ -564,27 +565,27 @@ export default {
}
},
//
setCollect: function() {
setCollect: function () {
let that = this,
id = that.storeInfo.id,
category = "product";
if (that.storeInfo.userCollect) {
getCollectDel(id, category).then(function() {
getCollectDel(id, category).then(function () {
that.storeInfo.userCollect = !that.storeInfo.userCollect;
});
} else {
getCollectAdd(id, category).then(function() {
getCollectAdd(id, category).then(function () {
that.storeInfo.userCollect = !that.storeInfo.userCollect;
});
}
},
//
joinCart: function() {
joinCart: function () {
//0=
this.goCat(0);
},
//
goCat: function(news) {
goCat: function (news) {
let that = this,
productSelect = that.productValue[this.attrValue];
//
@ -607,7 +608,7 @@ export default {
uni.showToast({
title: "产品库存不足,请选择其它",
icon: "none",
duration: 2000
duration: 2000,
});
return;
}
@ -618,18 +619,18 @@ export default {
uniqueId:
that.attr.productSelect !== undefined
? that.attr.productSelect.unique
: ""
: "",
};
postCartAdd(q)
.then(function(res) {
.then(function (res) {
that.isOpen = false;
that.attr.cartAttr = false;
if (news) {
that.$yrouter.push({
path: "/pages/order/OrderSubmission/index",
query: {
id: res.data.cartId
}
id: res.data.cartId,
},
});
} else {
uni.showToast({
@ -638,32 +639,32 @@ export default {
duration: 2000,
complete: () => {
that.getCartCount(true);
}
},
});
}
})
.catch(error => {
.catch((error) => {
that.isOpen = false;
uni.showToast({
title: error.response.data.msg,
icon: "none",
duration: 2000
duration: 2000,
});
});
},
//
getCartCount: function(isAnima) {
getCartCount: function (isAnima) {
let that = this;
const isLogin = that.isLogin;
if (isLogin) {
getCartCount({
numType: 0
}).then(res => {
numType: 0,
}).then((res) => {
that.CartCount = res.data.count;
//
if (isAnima) {
that.animated = true;
setTimeout(function() {
setTimeout(function () {
that.animated = false;
}, 500);
}
@ -671,20 +672,75 @@ export default {
}
},
//
tapBuy: function() {
tapBuy: function () {
// 1=
this.goCat(1);
},
listenerActionSheet: function() {
listenerActionSheet: function () {
if (isWeixin() === true) {
this.weixinStatus = true;
}
this.posters = true;
},
listenerActionClose: function() {
listenerActionClose: function () {
this.posters = false;
}
}
},
setOpenShare: function () {
var data = this.storeInfo;
var href = location.href;
if (this.$deviceType == "weixin") {
if (this.isLogin) {
getUserInfo().then((res) => {
href =
href.indexOf("?") === -1
? href + "?spread=" + res.data.uid
: href + "&spread=" + res.data.uid;
var configAppMessage = {
desc: data.storeInfo,
title: data.storeName,
link: href,
imgUrl: data.image,
};
wechatEvevt(
["updateAppMessageShareData", "updateTimelineShareData"],
configAppMessage
)
.then((res) => {
console.log(res);
})
.catch((res) => {
console.log(res);
if (res.is_ready) {
res.wx.updateAppMessageShareData(configAppMessage);
res.wx.updateTimelineShareData(configAppMessage);
}
});
});
} else {
var configAppMessage = {
desc: data.storeInfo,
title: data.storeName,
link: href,
imgUrl: data.image,
};
wechatEvevt(
["updateAppMessageShareData", "updateTimelineShareData"],
configAppMessage
)
.then((res) => {
console.log(res);
})
.catch((res) => {
console.log(res);
if (res.is_ready) {
res.wx.updateAppMessageShareData(configAppMessage);
res.wx.updateTimelineShareData(configAppMessage);
}
});
}
}
},
},
};
</script>

9
pages/user/address/AddAddress/index.vue

@ -150,15 +150,20 @@ export default {
});
} else {
uni.showToast({
title: "已取消绑定",
title: "操作成功",
icon: "none",
duration: 2000
});
// uni.showToast({
// title: "",
// icon: "none",
// duration: 2000
// });
// that.$yrouter.replace({
// path: "/pages/user/PersonalData/index"
// });
}
that.$yrouter.go(-1);
that.$yrouter.back();
});
} catch (err) {
uni.showToast({

5
utils/index.js

@ -1,11 +1,12 @@
import Vue from 'vue'
// import MpvueRouterPatch from 'mpvue-router-patch'
// Vue.use(MpvueRouterPatch)
import {
wxappAuth,
getUserInfo
} from "@/api/user";
import store from "../store";
import store from "@/store";
import dayjs from "dayjs";
import cookie from "@/utils/store/cookie";
import stringify from "@/utils/querystring";
@ -174,7 +175,7 @@ export const login = () => {
location.replace("/pages/home/index");
});
} else {
wechat().then(() => oAuth());
// wechat().then(() => oAuth());
}
// if (!code) {
// toAuth("wxc061dee8806ff712")

Loading…
Cancel
Save