diff --git a/config/utils.js b/config/utils.js
index 3468168..982d5a3 100644
--- a/config/utils.js
+++ b/config/utils.js
@@ -158,32 +158,8 @@ export const setPay = function(payInfo, callback) {
if (payData.orderInfo != '' && payData.orderInfo != undefined) {
console.log("支付参数", payData);
// let EnvUtils = plus.android.importClass('com.alipay.sdk.app.EnvUtils');
- // EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
- let payData1 = {
- provider: 'alipay',
- orderInfo: data.orderInfo,
- success(res) {
- console.log('success:' + res);
- },
- //调用失败的回调
- fail(err) {
- console.log('fail:' + err);
- console.log(JSON.stringify(err))
- uni.showModal({
- title: '提示',
- showCancel:false,
- content: '商家支付参数错误,请重新发起付款',
- success: function (res) {
- if (res.confirm) {
- console.log('用户点击确定');
- } else if (res.cancel) {
- console.log('用户点击取消');
- }
- }
- });
- }
- }
- uni.requestPayment(payData1);
+ // EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
+ uni.requestPayment(payData);
}
}, err => {
@@ -262,15 +238,14 @@ export const getLatLon = function(tip) {
// 单独重新微信支付
export const setWXPay = function(payInfo, callback) {
$http.request({
- url: "/pay/placeAnOrder/app",
+ url: "/pay/placeAnOrder/shoppingpay",
method: "POST", // POST、GET、PUT、DELETE,具体说明查看官方文档
data:payInfo,
header: { //默认 无 说明:请求头1
'Content-Type': 'application/json'
},
}).then(res => {
- console.log(res,'res')
-
+ console.log(res,'res')
if(res.code === 0){
let payData = {
provider : 'wxpay',
@@ -289,19 +264,21 @@ export const setWXPay = function(payInfo, callback) {
success: true,
data: res
});
- // console.log('success:' + JSON.stringify(res));
+ console.log('success:' + JSON.stringify(res));
},
fail(err) {
callback && callback({
success: false,
data: err
});
- // console.log('fail:' + JSON.stringify(err));
+ console.log('fail:' + JSON.stringify(err));
}
}
// console.log(payData)
+ if(payData.orderInfo.prepayid != '' && payData.orderInfo.prepayid != undefined){
uni.requestPayment(payData);
+ }
}
})
}
diff --git a/manifest.json b/manifest.json
index 4e121f4..4be880d 100644
--- a/manifest.json
+++ b/manifest.json
@@ -98,7 +98,8 @@
"useOriginalMsgbox" : true
},
"ios" : {
- "dSYMs" : false
+ "dSYMs" : false,
+ "UIBackgroundModes":["audio"] // 背景播放音乐
},
"icons" : {
"android" : {
diff --git a/pages/bookShop/orderLCont.vue b/pages/bookShop/orderLCont.vue
index 8532d72..8a893bc 100644
--- a/pages/bookShop/orderLCont.vue
+++ b/pages/bookShop/orderLCont.vue
@@ -202,6 +202,7 @@
this.$http
.post(`/book/buyorder/queryFMS?orderId=${this.orderID}`)
.then(res => {
+ console.log(res,'物流信息')
if (res && res.code === 0) {
// console.log(res, '物流信息')
res.rntStr.forEach(item => {
diff --git a/pages/bookShop/orderList.vue b/pages/bookShop/orderList.vue
index 618d1ef..9f8388b 100644
--- a/pages/bookShop/orderList.vue
+++ b/pages/bookShop/orderList.vue
@@ -77,10 +77,10 @@
import $http from '@/config/requestConfig.js';
import {
setPay,
- setPayAssign
+ setPayAssign,setWXPay
} from '@/config/utils';
- import {
- mapState
+import {
+ mapState,mapMutations
} from 'vuex';
export default {
data() {
@@ -103,10 +103,14 @@
}],
orderListTab: 9,
orderList: [],
+ iapChannel:{},
+ checking:false, // 正在检测
+ ComplateRequestArr:null,
}
},
onShow() {
this.getOrderList()
+ this.checkIapOrders() //检查未完成的苹果支付订单
},
computed: {
...mapState(['userInfo']),
@@ -117,6 +121,24 @@
uni.stopPullDownRefresh()
},
methods: {
+ ...mapMutations(['setUserInfo']),
+ checkIapOrders() {
+ const that = this
+ // 如果ios已经绑定支付信息,就直接支付,如果没有绑定,就需要先绑定
+ console.log('检测支付环境...')
+ plus.payment.getChannels((channels) => {
+ console.log(channels, 'channels')
+ for (var i in channels) {
+ // 判断是否苹果支付1
+ if (channels[i].id === 'appleiap') {
+ that.iapChannel = channels[i]
+ that.restoreComplateRequest() // 检查未关闭订单
+ // that.requestOrder(productId)
+ }
+ }
+ })
+
+ },
// 切换订单状态
orderTabCLi(e) {
this.orderListTab = e
@@ -127,7 +149,7 @@
getOrderList() {
this.$http
.post(`book/buyorder/appUserGetlist?userId=${this.userInfo.id}&orderStatus=${this.orderListTab}`)
- .then(res => {
+ .then(res => {
this.orderList = res.page.list
})
},
@@ -138,7 +160,15 @@
url: './orderLCont?orderId=' + e.orderId + '&orderType=' + e.orderStatus
});
},
-
+
+ // 跳转到支付页面
+ goPay1(e){
+ console.log(e,'goPay1')
+ uni.navigateTo({
+ url: '../peanut/reCharge?orderSn=' + e.orderSn
+ });
+ },
+
// 取消订单
canceOrder(e) {
uni.showModal({
@@ -166,6 +196,10 @@
// 支付
goPay(payItem) {
+ console.log(payItem,'payItem')
+
+ if(payItem.paymentMethod == 2){
+ console.log('阿里支付')
setPay({
typePay: 'alipay',
subject: 'order',
@@ -187,7 +221,249 @@
}
this.getOrderList()
})
+ } else if(payItem.paymentMethod == 1){
+ console.log('微信支付')
+ let data1={
+ orderSn:payItem.orderSn,
+ buyOrderId: null,
+ totalAmount: payItem.realMoney
+ }
+ console.log(data1,'data1')
+ setWXPay(data1,res => {
+ if (res.success) {
+ uni.showToast({
+ title: "支付成功"
+ });
+ } else {
+ console.log(res)
+ if(res.data.errMsg.indexOf('User canceled') != -1){
+ uni.showToast({
+ title: "用户取消支付",
+ icon: "none",
+ image: '../../static/icon/ic_close.png'
+ });
+ }else{
+ uni.showToast({
+ title: "支付失败",
+ icon: "none",
+ image: '../../static/icon/ic_close.png'
+ });
+ }
+ }
+ })
+ }else if(payItem.paymentMethod == 3){
+ // 苹果充值
+ console.log('苹果二次支付')
+ this.iphonepay(payItem)
}
+ },
+ iphonepay(payItem) {
+ console.log(this.userInfo.restoreFlag,'this.userInfo.restoreFlag')
+ if(this.ComplateRequestArr == null || this.ComplateRequestArr == [] ){
+ this.requestOrder(payItem)
+ }else{
+ uni.showModal({
+ title:'提示',
+ showCancel: false,
+ content: '您的账户存在未完成的支付订单,请稍后重启app留意账户变动。',
+ })
+ }
+ },
+ requestOrder(payItem) {
+ uni.showLoading({
+ title: '获取商品信息',
+ mask: true
+ })
+ const that = this
+ // console.log(productId, 88888888)
+ // ['xxxxx'] 是平台申请拿到的内购商品的id
+ let IAPOrders = []
+ IAPOrders.push(payItem.productId+'')
+ console.log(IAPOrders, 'IAPOrders')
+ // 新建订单
+ that.iapChannel.requestOrder(IAPOrders, function(event) {
+ // uni.hideLoading()
+ console.log(event, 'event')
+ for (var index in event) {
+ var OrderItem = event[index]
+ // console.log(OrderItem, 'OrderItem')
+ console.log(OrderItem.productid,'OrderItem.productid')
+ that.topay(payItem)
+ }
+ }, function(erroemsg) {
+ uni.showToast({
+ title: "商品获取失败",
+ icon: 'none'
+ })
+ })
+ },
+ topay(payItem) {
+ const that = this
+ uni.hideLoading()
+ // var restoreFlag = true; // 调用支付接口时标记 restoreFlag = true , 实际应用请将标记存储在 storage 中
+ this.setUserInfo({restoreFlag:true});
+ console.log(this.userInfo,'更新后的用户信息')
+ plus.payment.request(that.iapChannel, {
+ productid: payItem.productId,
+ username: payItem.orderSn, // 用户标识/订单标识
+ manualFinishTransaction: true // 3.5.1+ 支持,设置此参数后需要开发者主动关闭订单,参见下面的关闭订单方法 finishTransaction()
+
+ }, function(result) {
+ // restoreFlag = false; // 支付成功清除标记 restoreFlag = false
+ that.transaction = result
+ // 支付成功,result 为 IAP商品交易信息对象 IAPTransaction 需将返回的支付凭证传给后端进行二次认证
+ that.iapCheck(result)
+ }, function(e) {
+ if(e.errCode == 2){
+ // 用户未绑定支付方式,app内支付流程结束,系统弹出框引导用户绑定支付方式,此过程将跳转到系统应用 AppStore 进行绑定支付方式,绑定成功同步支付成功,用户成功付款
+ plus.runtime.openURL("https://apps.apple.com/account/billing");
+ }else{
+ // restoreFlag = false; // 支付失败清楚标记
+ that.finishTransaction(result);
+ //console.log('订单关闭后的用户信息', that.userInfo);
+ // console.log(e)
+ //console.log(e.message)
+ }
+ });
+ },
+ // 查询未关闭订单
+ restoreComplateRequest(){
+ let that = this
+ console.log('检测未完成订单')
+ // console.log(that.iapChannel,'this.iapChannel')
+ that.iapChannel.restoreComplateRequest({
+ manualFinishTransaction: true
+ }, function(results) {
+ console.log('进入restoreComplateRequest')
+ // if(!that.checking){
+ // that.checking = true
+ // console.log(that.checking)
+ // results 格式为数组存放恢复的IAP商品交易信息对象 IAPTransaction,通用需将返回的支付凭证传给后端进行二次认证
+ that.ComplateRequestArr = results
+ console.log(that.ComplateRequestArr,'未完成订单数组')
+ if(results && results.length>0){
+ results.map((item,index)=>{
+ // "0"为正在支付;"1"为支付成功;"2"为支付失败;"3"为支付已恢复。
+ if(item.transactionState == '1'){
+ // 已经支付,但是没有走逻辑的内购订单
+ that.iapCheck(item,index)
+ }else{
+ // 其他状态的内购订单
+ that.finishTransaction(item)
+
+ }
+ })
+ }else{
+ this.setUserInfo({restoreFlag:false});
+ console.log('无未处理订单,可以拉起新的支付')
+ }
+ // }
+ });
+
+
+ },
+ // 关闭交易订单
+ finishTransaction(trans,index){
+ this.iapChannel.finishTransaction(trans, (success) => {
+ console.log('关闭订单成功',index);
+
+ if(index == this.ComplateRequestArr.length-1){ // 最后一个支付订单
+ this.setUserInfo({restoreFlag:false});
+ console.log(this.userInfo.restoreFlag, 'this.userInfo.restoreFlag')
+ }
+
+ }, (fail) => {
+ console.log('关闭订单失败');
+ });
+ },
+ iapCheck(result,index) {
+ const that = this
+ console.log('进入后台验证')
+ let data = {
+ transactionId: result.transactionIdentifier, // 支付交易id
+ customerOid: that.userInfo.id,
+ productId: result.payment.productid, // 产品id
+ orderId: result.payment.username, // 系统订单号
+ receiptData: result.transactionReceipt ,// 苹果返回收据
+ loadAnimate:'none', // 请求加载动画
+ }
+ console.log(data,'data')
+ $http.request({
+ url: "/Ipa/veri",
+ method: "POST", // POST、GET、PUT、DELETE,具体说明查看官方文档
+ data,
+ header: { //默认 无 说明:请求头
+ 'Content-Type': 'application/json'
+ },
+ }).then(res => {
+ console.log(JSON.stringify(res))
+ console.log(res.code)
+ if(res.code == 0){
+ // uni.hideLoading()
+ console.log('充值订单已处理,请留意账户金额变动....')
+ // 服务器验证票据有效后在客户端关闭订单
+ that.finishTransaction(result,index)
+ }else if(res.code == 200){ // 重复验证订单
+ console.log('重复验证....')
+ that.finishTransaction(result,index)
+ }
+ }).catch(e => {
+ console.log('支付验证失败,进入轮询程序...')
+ that.getIapPayResult(result,index)
+ })
+ console.log('--------------')
+ },
+
+ // 轮询验证支付结果
+ getIapPayResult(result,index){
+ // let interval = null
+ this.ComplateRequestInterval = setTimeout(() => {
+ if(this.maxTimes <= 3){
+ this.iapCheck(result,index)
+ console.log('执行1', this.maxTimes,this.ComplateRequestInterval)
+ this.maxTimes += 1
+ }else{
+ this.maxTimes = 0
+ console.log('停止轮询', this.maxTimes,this.ComplateRequestInterval, this.maxTimes)
+ this.checking = false
+ this.saveErrorIapOrder(result,index)
+ clearTimeout(this.ComplateRequestInterval)
+
+ }
+ },10000)
+
+ },
+ // 轮询失败接口
+ saveErrorIapOrder(result,index){
+ console.log('提交到充值问题单里面...')
+ let data = {
+ transactionId : result.transactionIdentifier,
+ failureflag: 1,
+ orderId:result.payment.username,
+ receiptData:result.transactionReceipt,
+ productId:result.payment.productid,
+ customerOid:this.userInfo.id
+ }
+ $http.request({
+ url: "Ipa/failure",
+ method: "POST", // POST、GET、PUT、DELETE,具体说明查看官方文档
+ data,
+ header: { //默认 无 说明:请求头
+ 'Content-Type': 'application/json'
+ },
+ }).then(res => {
+ console.log(JSON.stringify(res))
+ if(res.code == 200){
+ console.log('提交成功,关闭订单')
+ this.finishTransaction(result,index)
+ }
+ }).catch(e => {
+ console.log(e)
+ if(e.statusCode == 0){ // 重复提交,直接关闭订单
+ this.finishTransaction(result,index)
+ }
+ })
+ },
}
}
diff --git a/pages/bookShop/settlement.vue b/pages/bookShop/settlement.vue
index 7da2d8d..a6d7af7 100644
--- a/pages/bookShop/settlement.vue
+++ b/pages/bookShop/settlement.vue
@@ -67,8 +67,8 @@
¥{{farePrice}}
-
-
+
+
@@ -84,7 +84,24 @@
-
+
+
+
+
+
+
+
+ {{item.title}}
+ {{userMes.peanutCoin}}疯币可用
+ 去充值
+
+
+
+
+
+
+