beecloud.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. var beecloud = {};
  2. var channels = null;
  3. var w = null;
  4. beecloud.payReq = function(data, cbsuccess, cberror) {
  5. doPay(data, cbsuccess, cberror);
  6. };
  7. beecloud.genBillNo = function() {
  8. var d = new Date();
  9. var vYear = d.getFullYear();
  10. var vMon = d.getMonth() + 1;
  11. var vDay = d.getDate();
  12. var h = d.getHours();
  13. var m = d.getMinutes();
  14. var se = d.getSeconds();
  15. var ms = d.getMilliseconds();
  16. billno = "" + vYear + (vMon < 10 ? "0" + vMon : vMon) + (vDay < 10 ? "0" + vDay : vDay) + (h < 10 ? "0" + h : h) + (m < 10 ? "0" + m : m) + (se < 10 ? "0" + se : se) + ms;
  17. return billno;
  18. };
  19. mui.plusReady(function () {
  20. plus.payment.getChannels(function(s) {
  21. channels = s;
  22. }, function(e) {
  23. alert("获取支付渠道信权限失败:" + e.message);
  24. });
  25. });
  26. function checkServices(pc) {
  27. if (!pc.serviceReady) {
  28. var txt = null;
  29. switch (pc.id) {
  30. case "alipay":
  31. txt = "检测到系统未安装“支付宝快捷支付服务”,无法完成支付操作,是否立即安装?";
  32. break;
  33. default:
  34. txt = "系统未安装“" + pc.description + "”服务,无法完成支付,是否立即安装?";
  35. break;
  36. }
  37. plus.nativeUI.confirm(txt, function(e) {
  38. if (e.index == 0) {
  39. pc.installService();
  40. }
  41. }, pc.description);
  42. return false;
  43. }
  44. return true;
  45. }
  46. function getRandomHost() {
  47. var hosts = ['https://apibj.beecloud.cn',
  48. 'https://apihz.beecloud.cn',
  49. 'https://apisz.beecloud.cn',
  50. 'https://apiqd.beecloud.cn'
  51. ];
  52. return "" + hosts[parseInt(3 * Math.random())] + "/2/rest/app/bill";
  53. }
  54. function getPayChannel(bc_channel) {
  55. var dc_channel_id = '';
  56. switch (bc_channel) {
  57. case 'ALI_APP':
  58. dc_channel_id = 'alipay';
  59. break;
  60. case 'WX_APP':
  61. dc_channel_id = 'wxpay';
  62. break;
  63. default:
  64. break;
  65. }
  66. for (var i in channels) {
  67. if (channels[i].id == dc_channel_id && checkServices(channels[i])) {
  68. return channels[i];
  69. }
  70. }
  71. return null;
  72. }
  73. function doPay(payData, cbsuccess, cberror) {
  74. if (w) return;
  75. console.log('doPay: ' + JSON.stringify(payData));
  76. w = plus.nativeUI.showWaiting();
  77. mui.ajax(getRandomHost(), {
  78. data: JSON.stringify(payData),
  79. type: 'post',
  80. dataType: 'json',
  81. contentType: "application/json",
  82. success: function(data) {
  83. console.log(JSON.stringify(data));
  84. w.close();
  85. w = null;
  86. var paySrc = '';
  87. if (data.result_code == 0) {
  88. var payChannel = getPayChannel(payData.channel);
  89. if (payChannel) {
  90. if (payChannel.id === 'alipay') {
  91. paySrc = data.order_string;
  92. } else if (payChannel.id === 'wxpay') {
  93. var statement = {};
  94. statement.appid = data.app_id;
  95. statement.noncestr = data.nonce_str;
  96. statement.package = data.package;
  97. statement.partnerid = data.partner_id;
  98. statement.prepayid = data.prepay_id;
  99. statement.timestamp = parseInt(data.timestamp);
  100. statement.sign = data.pay_sign;
  101. paySrc = JSON.stringify(statement);
  102. }
  103. plus.payment.request(payChannel, paySrc, cbsuccess, cberror);
  104. }
  105. } else {
  106. var bcError = {};
  107. bcError.code = data.result_code;
  108. bcError.message = data.result_msg + ":" + data.err_detail;
  109. cberror(bcError);
  110. }
  111. },
  112. error: function(xhr, errorType, error) {
  113. w.close();
  114. w = null;
  115. cberror(error);
  116. }
  117. });
  118. }