pay.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. // #ifdef H5
  2. import jweixin from '@/lib/jweixin.js';
  3. // #endif
  4. import dever from './core';
  5. import html from './html';
  6. var pay = {
  7. init: function(doc) {
  8. html.init(doc);
  9. },
  10. // 支付
  11. payment: function(order_no, param, callback, errCallback) {
  12. if (param.link) {
  13. return dever.location(param.link);
  14. }
  15. if (dever.env == 4) {
  16. // app
  17. this.appPayment(param, res => {
  18. if (callback) {
  19. callback(res)
  20. } else {
  21. dever.alert('支付成功');
  22. }
  23. }, err => {
  24. if (errCallback) {
  25. errCallback(err)
  26. } else {
  27. dever.alert('支付失败');
  28. }
  29. });
  30. return;
  31. } else if (dever.env == 5) {
  32. // 小程序
  33. console.info(param)
  34. this.appletPayment(param, res => {
  35. if (callback) {
  36. callback(res)
  37. } else {
  38. dever.alert('支付成功');
  39. }
  40. }, err => {
  41. if (errCallback) {
  42. errCallback(err)
  43. } else {
  44. dever.alert('支付失败');
  45. }
  46. });
  47. return;
  48. } else if (dever.env == 2) {
  49. // h5支付
  50. html.insert(param);
  51. if (callback) {
  52. callback()
  53. } else {
  54. dever.alert('支付成功');
  55. }
  56. return;
  57. } else if (dever.env == 3) {
  58. // jsapi支付
  59. this.wxJSApiPay(param, res => {
  60. if (callback) {
  61. callback(res)
  62. } else {
  63. dever.alert('支付成功');
  64. }
  65. }, err => {
  66. if (errCallback) {
  67. errCallback(err)
  68. } else {
  69. dever.alert('支付失败');
  70. }
  71. });
  72. return;
  73. }
  74. },
  75. // app支付
  76. appPayment: function(param, callback, errorCallback) {
  77. let paymentType = dever.platform;
  78. if (dever.platform == 'weixin') {
  79. paymentType = 'wxpay'
  80. }
  81. uni.requestPayment({
  82. provider: paymentType,
  83. orderInfo: param,
  84. success: function(res) {
  85. if (callback) {
  86. callback(res);
  87. }
  88. },
  89. fail: function(err) {
  90. console.log('fail:' + JSON.stringify(err));
  91. if (errorCallback) {
  92. errorCallback(err)
  93. }
  94. }
  95. });
  96. },
  97. // 小程序支付
  98. appletPayment: function(param, callback, errorCallback) {
  99. let paymentType = dever.platform;
  100. if (dever.platform == 'weixin') {
  101. paymentType = 'wxpay'
  102. }
  103. uni.requestPayment({
  104. provider: paymentType,
  105. timeStamp: String(param.timeStamp), // 必须转成字符串
  106. nonceStr: param.nonceStr,
  107. package: param.package, // "prepay_id=xxx"
  108. signType: param.signType || 'MD5',
  109. paySign: param.paySign,
  110. success: function(res) {
  111. if (callback) {
  112. callback(res);
  113. }
  114. },
  115. fail: function(err) {
  116. console.log('fail:' + JSON.stringify(err));
  117. if (errorCallback) {
  118. errorCallback(err)
  119. }
  120. }
  121. });
  122. },
  123. // 微信公众号支付
  124. wxJSApiPay: function(data, callback, errorCallback) {
  125. jweixin.config({
  126. debug: false, // 开启调试模式
  127. appId: data.appId, // 必填,公众号的唯一标识
  128. timestamp: data.timeStamp, // 必填,生成签名的时间戳
  129. nonceStr: data.nonceStr, // 必填,生成签名的随机串
  130. signature: data.paySign, // 必填,签名,见附录1
  131. jsApiList: ['checkJsApi', 'startRecord', 'stopRecord', 'translateVoice', 'scanQRCode',
  132. 'openCard'
  133. ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  134. });
  135. jweixin.ready(function() {
  136. jweixin.checkJsApi({
  137. jsApiList: ['checkJsApi', 'startRecord', 'stopRecord', 'translateVoice',
  138. 'scanQRCode', 'openCard'
  139. ],
  140. success: (res) => {},
  141. fail: function(res) {
  142. tool.msg('支付呼起失败');
  143. }
  144. });
  145. jweixin.chooseWXPay({
  146. timestamp: data.timeStamp,
  147. nonceStr: data.nonceStr,
  148. package: data.package,
  149. signType: data.signType,
  150. paySign: data.paySign,
  151. success: (res) => {
  152. tool.msg(res);
  153. // 前端判断返回方式,微信团队郑重提示:不保证绝对可靠,切记!
  154. if (res.errMsg == 'chooseWXPay:ok' && callback) {
  155. callback(res);
  156. } else {
  157. tool.msg('支付失败,请重试');
  158. }
  159. },
  160. cancel: (r) => {
  161. tool.msg('支付已取消');
  162. },
  163. fail: (err) => {
  164. if (errorCallback) {
  165. errorCallback(err)
  166. }
  167. }
  168. });
  169. });
  170. // config信息验证失败会执行error函数,
  171. jweixin.error(function(res) {
  172. console.log('jweixin.error失败:', res)
  173. });
  174. }
  175. }
  176. module.exports = pay;
  177. /*
  178. const pay = {
  179. //拉起支付
  180. pay : function(result, location, error) {
  181. var self = this;
  182. if (!error) {
  183. if (location.indexOf('?') == -1) {
  184. var fix = '?';
  185. } else {
  186. var fix = '&';
  187. }
  188. location = location + fix + 'order_id=' + result.order_id;
  189. }
  190. if (result.type == 'test') {
  191. self.alert('支付成功','none', function() {
  192. self.location(location, 'to');
  193. })
  194. } else if (self.source == 'h5') {
  195. uni.hideLoading();
  196. uni.showLoading({title: '跳转中', mask: true});
  197. self.html(result.order);
  198. } else if (self.source == 'app') {
  199. self.appPayment(result.type, result.order, function() {
  200. self.location(location, 'to');
  201. }, function() {
  202. if (!error) {
  203. self.location(location + '&error=1', 'to');
  204. } else {
  205. self.alert(error);
  206. }
  207. });
  208. }
  209. },
  210. //app支付
  211. appPayment : function(type, order, callback, errorCallback) {
  212. uni.requestPayment({
  213. provider: type,
  214. orderInfo: order, //微信、支付宝订单数据
  215. success: function (res) {
  216. //console.log('success:' + JSON.stringify(res));
  217. callback(res);
  218. },
  219. fail: function (err) {
  220. //console.log('fail:' + JSON.stringify(err));
  221. errorCallback(err)
  222. }
  223. });
  224. },
  225. }*/