payment.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  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. // #ifdef MP-TOUTIAO
  36. type = "tt";
  37. // #endif
  38. }else if(platformAgent.type == "h5"){
  39. type = platformAgent.isWechat ? "wechat" : "h5";
  40. }else if(platformAgent.type == "app"){
  41. type = "app";
  42. }
  43. return new Promise((resolve, reject)=>{
  44. getPaymentMethod({
  45. type: type,pay_type: payType
  46. }).then(res=>{
  47. this.getAppPayment(res.data).then(rs=>{
  48. resolve(rs);
  49. }).catch(err=>{
  50. reject(err);
  51. });
  52. }).catch(err=>{
  53. reject(err);
  54. });
  55. });
  56. },
  57. getAppPayment(providerList){
  58. return new Promise((resolve, reject)=>{
  59. uni.getProvider({
  60. service: 'payment',
  61. success: (e) => {
  62. let data = []
  63. for (let i = 0; i < e.provider.length; i++) {
  64. switch (e.provider[i]) {
  65. case 'wxpay':
  66. data.push("wechat")
  67. break;
  68. case 'alipay':
  69. data.push("alipay")
  70. break;
  71. // case 'appleiap':
  72. // data.push({
  73. // id: 'appleiap',
  74. // class: 'fa fa-apple',
  75. // name: '苹果支付',
  76. // text: '\ue62c',
  77. // sort:0
  78. // })
  79. // break;
  80. default:
  81. break;
  82. }
  83. }
  84. let array = [];
  85. if(data.length <= 0){
  86. resolve(providerList);
  87. }else{
  88. for(let i=0; i<providerList.length; i++){
  89. if(utils.in_array(providerList[i].id,data)){
  90. array.push(providerList[i]);
  91. }else if(providerList[i].id == "balance"){
  92. array.push(providerList[i]);
  93. }
  94. }
  95. resolve(array);
  96. }
  97. },
  98. fail: (e) => {
  99. reject("获取支付通道失败");
  100. }
  101. });
  102. });
  103. },
  104. crreateOrder(data,updateCart){
  105. let updateCartCount = updateCart || false;
  106. if(updateCartCount){
  107. store.commit("UPDATECART",data.shop_count);
  108. if(data.shop_count > 0){
  109. uni.setTabBarBadge({ index: 3, text: data.shop_count.toString() });
  110. }else{
  111. uni.removeTabBarBadge({ index: 3 });
  112. }
  113. }
  114. if(data.pay == 0){
  115. utils.redirectTo('order/detail',{ id: data.order_id });
  116. return true;
  117. }else if(data.pay == 99){
  118. if(this.payType == "pay"){
  119. storage.set("order_msg",data.msg);
  120. storage.set("order_id",data.order_id);
  121. utils.redirectTo('cart/info');
  122. }else if(this.payType == "order" || this.payType == "rechange"){
  123. utils.msg(data.msg);
  124. }
  125. return true;
  126. }
  127. let platformAgent = utils.platformAgent();
  128. if(platformAgent.isMini){
  129. this.createMpPayment(data);
  130. }else if(platformAgent.type == "h5"){
  131. this.createWebPayment(data);
  132. }else if(platformAgent.type == "app"){
  133. this.createAppPayment(data);
  134. }
  135. },
  136. createMpPayment(data){
  137. let that = this;
  138. switch (data.pay+"") {
  139. case "1":
  140. let params = data.result.params;
  141. wx.requestPayment({
  142. timeStamp: params.timeStamp,
  143. nonceStr: params.nonceStr,
  144. package: params.package,
  145. signType: params.signType,
  146. paySign: params.paySign,
  147. success (res) {
  148. uni.showToast({
  149. title: "您己支付成功!",
  150. success: function (res){
  151. if(that.payType == "pay" || that.payType == "order"){
  152. utils.redirectTo('order/detail',{ id: data.order_id });
  153. }else{
  154. utils.redirectTo('bill/fund');
  155. }
  156. }
  157. });
  158. },
  159. fail (res) {
  160. uni.showModal({
  161. content: "支付失败,原因:" + JSON.stringify(res),
  162. showCancel: false
  163. })
  164. }
  165. });
  166. break;
  167. case "2": // 头条支付
  168. tt.pay({
  169. orderInfo: data.result.orderInfo,
  170. service: 5,
  171. success(res) {
  172. if(res.code==0){
  173. uni.showToast({
  174. title: "您己支付成功!",
  175. success: function (st){
  176. if(that.payType == "pay" || that.payType == "order"){
  177. utils.redirectTo('order/detail',{ id: data.order_id });
  178. }else{
  179. utils.redirectTo('bill/fund');
  180. }
  181. }
  182. });
  183. }else{
  184. switch(res.code){
  185. case 1:
  186. utils.msg("支付超时");
  187. break;
  188. case 2:
  189. utils.msg("支付失败");
  190. break;
  191. case 3:
  192. utils.msg("支付关闭");
  193. break;
  194. case 4:
  195. break;
  196. case 9:
  197. default:
  198. utils.msg("支付错误 code: " + res.code);
  199. break;
  200. }
  201. }
  202. },
  203. fail(res) {
  204. utils.msg('调起收银台失败-'+res.errMsg);
  205. }
  206. });
  207. break;
  208. }
  209. },
  210. createWebPayment(data){
  211. let that = this;
  212. switch (data.pay+"") {
  213. case "1":
  214. wx.config(data.result.config);
  215. let options = data.result.options;
  216. let that = this;
  217. options.success = function(){
  218. uni.showToast({
  219. title: "您己支付成功!",
  220. success: function (res){
  221. if(that.payType == "pay" || that.payType == "order"){
  222. utils.redirectTo('order/detail',{ id: data.order_id });
  223. }else{
  224. utils.redirectTo('bill/fund');
  225. }
  226. }
  227. });
  228. }
  229. wx.chooseWXPay(options);
  230. break;
  231. case "2":
  232. if(that.payType == "pay" || that.payType == "order"){
  233. location.href = data.result.url+"&redirect_url="+location.origin+'/wap/pages/order/detail/'+data.order_id;
  234. }else{
  235. location.href = data.result.url+"&redirect_url="+location.origin+'/wap/pages/bill/fund';
  236. }
  237. break;
  238. case "3":
  239. utils.showLoading();
  240. let div = document.createElement('div');
  241. div.innerHTML = data.result;
  242. document.body.appendChild(div);
  243. document.forms.alipaysubmit.submit();
  244. break;
  245. }
  246. },
  247. createAppPayment(data){
  248. switch (data.pay+"") {
  249. case "1":
  250. this.requestPayment(data.result.params,"wxpay",{ id: data.order_id });
  251. break;
  252. case "2":
  253. this.requestPayment(data.result.params,"alipay",{ id: data.order_id });
  254. break;
  255. }
  256. },
  257. /**
  258. * 调起APP支付
  259. */
  260. async requestPayment(orderInfo,type,orderParams) {
  261. if(!orderInfo) {
  262. uni.showModal({
  263. content: '获取支付信息失败',
  264. showCancel: false
  265. })
  266. return
  267. }
  268. let that = this;
  269. uni.requestPayment({
  270. provider: type,
  271. orderInfo: orderInfo,
  272. success: (e) => {
  273. uni.showToast({
  274. title: "您己支付成功!",
  275. success: function (res){
  276. if(that.payType == "pay" || that.payType == "order"){
  277. utils.redirectTo('order/detail',orderParams);
  278. }else{
  279. utils.redirectTo('bill/fund');
  280. }
  281. }
  282. })
  283. },
  284. fail: (e) => {
  285. uni.showModal({
  286. content: "支付失败,原因为: " + e.errMsg,
  287. showCancel: false
  288. })
  289. }
  290. })
  291. }
  292. }