payment.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. import { getPaymentMethod } from "./http";
  2. import * as utils from "./utils";
  3. import store from "../store/index";
  4. import storage from 'common/storage';
  5. // #ifdef H5
  6. import wx from "weixin-js-sdk";
  7. // #endif
  8. export default {
  9. // pay,order,rechange
  10. payType: 'pay',
  11. setPayType(str){
  12. this.payType = str;
  13. return this;
  14. },
  15. getPaymentType(){
  16. let platformAgent = utils.platformAgent();
  17. if(platformAgent.isMini){
  18. return 3;
  19. }else if(platformAgent.type == "h5"){
  20. if(platformAgent.isWechat){
  21. return 2;
  22. }
  23. return 1;
  24. }else if(platformAgent.type == "app"){
  25. return 4;
  26. }
  27. },
  28. getPaymentList(pay_type){
  29. let payType = pay_type || "order";
  30. let providerList = [];
  31. let type = "";
  32. let platformAgent = utils.platformAgent();
  33. if(platformAgent.isMini){
  34. type = "mp";
  35. }else if(platformAgent.type == "h5"){
  36. type = platformAgent.isWechat ? "wechat" : "h5";
  37. }else if(platformAgent.type == "app"){
  38. type = "app";
  39. }
  40. return new Promise((resolve, reject)=>{
  41. getPaymentMethod({
  42. type: type,pay_type: payType
  43. }).then(res=>{
  44. this.getAppPayment(res.data).then(rs=>{
  45. resolve(rs);
  46. }).catch(err=>{
  47. reject(err);
  48. });
  49. }).catch(err=>{
  50. reject(err);
  51. });
  52. });
  53. },
  54. getAppPayment(providerList){
  55. return new Promise((resolve, reject)=>{
  56. uni.getProvider({
  57. service: 'payment',
  58. success: (e) => {
  59. let data = []
  60. for (let i = 0; i < e.provider.length; i++) {
  61. switch (e.provider[i]) {
  62. case 'wxpay':
  63. data.push("wechat")
  64. break;
  65. case 'alipay':
  66. data.push("alipay")
  67. break;
  68. // case 'appleiap':
  69. // data.push({
  70. // id: 'appleiap',
  71. // class: 'fa fa-apple',
  72. // name: '苹果支付',
  73. // text: '\ue62c',
  74. // sort:0
  75. // })
  76. // break;
  77. default:
  78. break;
  79. }
  80. }
  81. let array = [];
  82. if(data.length <= 0){
  83. resolve(providerList);
  84. }else{
  85. for(let i=0; i<providerList.length; i++){
  86. if(utils.in_array(providerList[i].id,data)){
  87. array.push(providerList[i]);
  88. }else if(providerList[i].id == "balance"){
  89. array.push(providerList[i]);
  90. }
  91. }
  92. resolve(array);
  93. }
  94. },
  95. fail: (e) => {
  96. reject("获取支付通道失败");
  97. }
  98. });
  99. });
  100. },
  101. crreateOrder(data,updateCart){
  102. let updateCartCount = updateCart || false;
  103. if(updateCartCount){
  104. store.commit("UPDATECART",data.shop_count);
  105. if(data.shop_count > 0){
  106. uni.setTabBarBadge({ index: 2, text: data.shop_count.toString() });
  107. }else{
  108. uni.removeTabBarBadge({ index: 2 });
  109. }
  110. }
  111. if(data.pay == 0){
  112. utils.redirectTo('order/detail',{ id: data.order_id });
  113. return true;
  114. }else if(data.pay == 99){
  115. if(this.payType == "pay"){
  116. storage.set("order_msg",data.msg);
  117. storage.set("order_id",data.order_id);
  118. utils.redirectTo('cart/info');
  119. }else if(this.payType == "order" || this.payType == "rechange"){
  120. utils.msg(data.msg);
  121. }
  122. return true;
  123. }
  124. let platformAgent = utils.platformAgent();
  125. if(platformAgent.isMini){
  126. this.createMpPayment(data);
  127. }else if(platformAgent.type == "h5"){
  128. this.createWebPayment(data);
  129. }else if(platformAgent.type == "app"){
  130. this.createAppPayment(data);
  131. }
  132. },
  133. createMpPayment(data){
  134. let that = this;
  135. switch (data.pay+"") {
  136. case "1":
  137. let params = data.result.params;
  138. wx.requestPayment({
  139. timeStamp: params.timeStamp,
  140. nonceStr: params.nonceStr,
  141. package: params.package,
  142. signType: params.signType,
  143. paySign: params.paySign,
  144. success (res) {
  145. uni.showToast({
  146. title: "您已支付成功!",
  147. success: function (res){
  148. if(that.payType == "pay" || that.payType == "order"){
  149. utils.redirectTo('order/detail',{ id: data.order_id });
  150. }else{
  151. utils.redirectTo('bill/fund');
  152. }
  153. }
  154. });
  155. },
  156. fail (res) {
  157. uni.showModal({
  158. content: "支付失败,原因:" + JSON.stringify(res),
  159. showCancel: false
  160. })
  161. }
  162. });
  163. break;
  164. }
  165. },
  166. createWebPayment(data){
  167. let that = this;
  168. switch (data.pay+"") {
  169. case "1":
  170. wx.config(data.result.config);
  171. let options = data.result.options;
  172. let that = this;
  173. options.success = function(){
  174. uni.showToast({
  175. title: "您已支付成功!",
  176. success: function (res){
  177. if(that.payType == "pay" || that.payType == "order"){
  178. utils.redirectTo('order/detail',{ id: data.order_id });
  179. }else{
  180. utils.redirectTo('bill/fund');
  181. }
  182. }
  183. });
  184. }
  185. wx.chooseWXPay(options);
  186. break;
  187. case "2":
  188. if(that.payType == "pay" || that.payType == "order"){
  189. location.href = data.result.url+"&redirect_url="+location.origin+'/wap/pages/order/detail/'+data.order_id;
  190. }else{
  191. location.href = data.result.url+"&redirect_url="+location.origin+'/wap/pages/bill/fund';
  192. }
  193. break;
  194. case "3":
  195. utils.showLoading();
  196. let div = document.createElement('div');
  197. div.innerHTML = data.result;
  198. document.body.appendChild(div);
  199. document.forms.alipaysubmit.submit();
  200. break;
  201. }
  202. },
  203. createAppPayment(data){
  204. switch (data.pay+"") {
  205. case "1":
  206. this.requestPayment(data.result.params,"wxpay",{ id: data.order_id });
  207. break;
  208. case "2":
  209. this.requestPayment(data.result.params,"alipay",{ id: data.order_id });
  210. break;
  211. }
  212. },
  213. /**
  214. * 调起APP支付
  215. */
  216. async requestPayment(orderInfo,type,orderParams) {
  217. if(!orderInfo) {
  218. uni.showModal({
  219. content: '获取支付信息失败',
  220. showCancel: false
  221. })
  222. return
  223. }
  224. let that = this;
  225. uni.requestPayment({
  226. provider: type,
  227. orderInfo: orderInfo,
  228. success: (e) => {
  229. uni.showToast({
  230. title: "您已支付成功!",
  231. success: function (res){
  232. if(that.payType == "pay" || that.payType == "order"){
  233. utils.redirectTo('order/detail',orderParams);
  234. }else{
  235. utils.redirectTo('bill/fund');
  236. }
  237. }
  238. })
  239. },
  240. fail: (e) => {
  241. uni.showModal({
  242. content: "支付失败,原因为: " + e.errMsg,
  243. showCancel: false
  244. })
  245. }
  246. })
  247. }
  248. }