bridge.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. let parse = function (req) {
  2. try {
  3. let result = JSON.parse(req.responseText)
  4. } catch (e) {
  5. let result = req.responseText
  6. }
  7. return result
  8. }
  9. let xhr = function (type, url, data) {
  10. return new Promise(function(resolve, reject) {
  11. var XHR = window.XMLHttpRequest || ActiveXObject
  12. var request = new XHR('MSXML2.XMLHTTP.3.0')
  13. request.open(type, url, true)
  14. request.setRequestHeader('Content-type', 'application/json; charset=utf-8')
  15. request.onreadystatechange = function () {
  16. if (request.readyState === 4) {
  17. if (request.status === 200)
  18. resolve(parse(request))
  19. else
  20. reject(parse(request))
  21. }
  22. }
  23. request.send(data)
  24. })
  25. }
  26. let post = function(url, data, json) {
  27. if (json) {
  28. return xhr('POST', url, JSON.stringify(data))
  29. }else{
  30. return xhr('POST', url, data)
  31. }
  32. }
  33. let get = function(url) {
  34. return xhr('GET', url)
  35. }
  36. // fake bridges
  37. const currentDomain = location.protocol + "//" + location.host;
  38. const ALIPAY_NOTIFY_URL = currentDomain + '/alipayNotify';
  39. window.AlipayJSBridge = AlipayJSBridge = {}
  40. AlipayJSBridge.call = function(type, payload, callback){
  41. if (type == "tradePay"){
  42. console.info('tradePay payload');
  43. console.group();
  44. console.dir(payload)
  45. callback({"resCode": "9000"})
  46. }
  47. }
  48. window.WeixinJSBridge = WeixinJSBridge = {}
  49. const WECHAT_NOTIFY_URL = currentDomain + '/finishedPay';
  50. let WECHAT_NOTIFY_PAYLOAD = `
  51. <xml>
  52. <appid><![CDATA[<%= appid %>]]></appid>
  53. <attach><![CDATA[支付测试]]></attach>
  54. <bank_type><![CDATA[CFT]]></bank_type>
  55. <fee_type><![CDATA[CNY]]></fee_type>
  56. <is_subscribe><![CDATA[Y]]></is_subscribe>
  57. <mch_id><![CDATA[<%= mch_id %>]]></mch_id>
  58. <nonce_str><![CDATA[<%= nonce_str %>]]></nonce_str>
  59. <openid><![CDATA[<%= openid %>]]></openid>
  60. <out_trade_no><![CDATA[<%= out_trade_no %>]]></out_trade_no>
  61. <result_code><![CDATA[SUCCESS]]></result_code>
  62. <return_code><![CDATA[SUCCESS]]></return_code>
  63. <sign><![CDATA[<%= sign %>]]></sign>
  64. <sub_mch_id><![CDATA[10000100]]></sub_mch_id>
  65. <time_end><![CDATA[20140903131540]]></time_end>
  66. <total_fee><%= total_fee %></total_fee><coupon_fee><![CDATA[10]]]></coupon_fee>
  67. <coupon_count><![CDATA[1]]></coupon_count>
  68. <coupon_type><![CDATA[CASH]]></coupon_type>
  69. <coupon_id><![CDATA[10000]]></coupon_id>
  70. <coupon_fee_0><![CDATA[100]]></coupon_fee_0>
  71. <trade_type><![CDATA[JSAPI]]></trade_type>
  72. <transaction_id><![CDATA[<%= transaction_id %>]]></transaction_id>
  73. </xml>`
  74. WeixinJSBridge.invoke = function(type, payload, callback){
  75. if (type == "getBrandWCPayRequest"){
  76. console.info('wechat::getBrandWCPayRequest payload');
  77. console.dir(payload)
  78. callback({"err_msg": "get_brand_wcpay_request:ok"});
  79. let payloadTemplate = _.template(WECHAT_NOTIFY_PAYLOAD);
  80. let rawMockPayload = /\{.*\}/g.exec(payload.package)[0];
  81. let mockPayload = JSON.parse(rawMockPayload)
  82. let notifyPayload = payloadTemplate(
  83. {
  84. 'mch_id': mockPayload.mch_id,
  85. 'sign': payload.sign,
  86. 'total_fee': mockPayload.total_fee,
  87. 'openid': mockPayload.openid,
  88. 'appid': payload.appId,
  89. 'transaction_id': mockPayload.transaction_id,
  90. 'nonce_str': payload.nonceStr,
  91. 'out_trade_no': mockPayload.out_trade_no
  92. }
  93. )
  94. console.info('sending wechat finish pay receipt')
  95. $.post(WECHAT_NOTIFY_URL, notifyPayload)
  96. }
  97. }