支付功能

分别在主窗口和浮动窗口页面js脚本区编写JavaScript代码,实现支付宝和微信支付功能。

一、主窗口

1、在waitpay.html页面js脚本区内编写javaScript代码,用于实现获取微信支付结果的回调函数。

  1. uexWeiXin.cbStartPay = function(data) {
  2. if(JSON.parse(data).errCode==0){
  3. uexWindow.evaluatePopoverScript("myorder", "content", "show()");
  4. uexWindow.evaluatePopoverScript("paylist", "content", "show()");
  5. appcan.window.close(-1);
  6. }else if(JSON.parse(data).errCode==-2){
  7. uexWindow.toast("0", "5","取消支付", "2000");
  8. }else{
  9. uexWindow.toast("0", "5","支付失败", "2000");
  10. }

效果如下:

支付功能 - 图1

2、实现当点击页面返回按钮时返回上一级页面并清除当前窗口的订单信息,代码如下:

  1. appcan.button(".nav-btn", "btn-act", function() {
  2. appcan.locStorage.remove("country");
  3. appcan.locStorage.remove("orderId");
  4. appcan.locStorage.remove('goodsArr');
  5. appcan.locStorage.remove('length');
  6. appcan.window.close(-1);
  7. })

效果如下:

支付功能 - 图2

二、浮动窗口

在waitpay_content.html页面js脚本区内编写javaScript代码,用于实现当前页面的支付宝支付功能和当前页面的微信支付功能,以及当前页面的数据获取功能。

1.关于支付宝支付功能的使用请参考appcan官网uexAliPay插件的相关说明。http://newdocx.appcan.cn/newdocx/docx?type=1385_975

2.关于微信支付功能的使用请参考appcan官网uexWeiXin插件的相关说明。http://newdocx.appcan.cn/newdocx/docx?type=1020_975

3.首先定义从支付宝官网申请得到的签约商户信息,其次是定义当前页面的币种、汇率、积分以及买家账户余额的信息。具体代码如下:

  1. var minusMy = appcan.locStorage.getVal("minusMy");
  2. var partner = "208845648165561";
  3. var seller = "48652321@qq.com";
  4. var rsaPrivate= "MIICdwIBADANBgkn4E3TszcjB+Kf7CGVQ/nsvyywjA+i+0vmaftUzoOdIcWnI8UEr9I=";
  5. var rsaPublic = "MIGfMA0GCSqGSIb3DQEBAQUAVsW8Ol75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB";
  6. var notifyUrl;
  7. var orderId = appcan.locStorage.getVal("orderId");
  8. var userId = appcan.locStorage.getVal("userId");
  9. console.log(orderId);
  10. var country = appcan.locStorage.getVal("country");
  11. var countryf = areaList[country].name;
  12. var back = appcan.locStorage.getVal("back");
  13. var fetchgoSeller;
  14. //卖家id;
  15. var originAmount = 0;
  16. //订单初始金额,外币
  17. var priceCode;
  18. //币种
  19. var payRate;
  20. //汇率
  21. var userCoupon;
  22. //var points=appcan.locStorage.getVal("integar");//获取到的用户积分
  23. var points;
  24. //积分
  25. var rates = Number(0.01);
  26. //积分兑换率
  27. var totalPrice = 0;
  28. var cheap;
  29. //积分可以兑换的金额
  30. var couponPrice = 0;
  31. var num;
  32. var last = 0;
  33. var balance;
  34. //余额
  35. var lastCheap = 0;
  36. var showBalance = 0;
  37. //最后用户使用的余额

4.在页面预加载函数内编写查询当用登录用户积分和余额的代码,支付宝支付状态的监听函数以及微信支付状态和生成预支付订单的回调函数,具体代码如下:

  1. appcan.ready(function() {
  2. if (minusMy <= 0) {
  3. $(".isover").remove();
  4. $("#cancleorder").removeClass("uhide");
  5. } else {
  6. /*查询用户的积分和余额*/
  7. appcan.request.ajax({
  8. url : api + '/api/user/me/' + userId,
  9. type : 'get',
  10. dataType : 'json',
  11. success : function(data) {
  12. balance = Math.floor(data.data.user.money);
  13. //查询到用户的余额
  14. $("#balance").html(balance + "元");
  15. point = Number(data.data.user.score);
  16. points = point - point % 100;
  17. //查询到用户的积分
  18. cheap = points * rates;
  19. /*单个订单只允许使用1000积分*/
  20. if (points < 1000) {
  21. $("#points").html(points + "积分抵扣" + cheap + "元");
  22. } else {
  23. points = 1000;
  24. cheap = 10;
  25. $("#points").html(points + "积分抵扣" + cheap + "元");
  26. }
  27. },
  28. error : function(errMessage) {
  29. }
  30. });
  31. }
  32. show();
  33. uexAliPay.onStatus = function(status, des) {
  34. if (status == 0) {
  35. uexWindow.evaluatePopoverScript("myorder", "content", "show()");
  36. uexWindow.evaluatePopoverScript("paylist", "content", "show()");
  37. uexWindow.evaluateScript('waitpay', '0', 'appcan.window.close(-1)');
  38. } else if (status == 4) {
  39. uexWindow.toast("0", "5", "取消支付", "2000");
  40. } else {
  41. uexWindow.toast("0", "5", "支付失败", "2000");
  42. }
  43. }
  44. uexWeiXin.cbStartPay = function(data) {
  45. if (JSON.parse(data).errCode == 0) {
  46. uexWindow.evaluatePopoverScript("myorder", "content", "show()");
  47. uexWindow.evaluatePopoverScript("paylist", "content", "show()");
  48. appcan.window.close(-1);
  49. } else if (JSON.parse(data).errCode == -2) {
  50. uexWindow.toast("0", "5", "取消支付", "2000");
  51. } else {
  52. uexWindow.toast("0", "5", "支付失败", "2000");
  53. }
  54. }
  55. //微信授权回调
  56. uexWeiXin.cbRegisterApp = function(opCode, dataType, data) {
  57. if (data == 0) {
  58. uexWeiXin.isSupportPay();
  59. }
  60. };
  61. uexWeiXin.cbIsSupportPay = function(opCode, dataType, data) {
  62. if (data == 0) {
  63. getPrepayId();
  64. }
  65. }
  66. uexWeiXin.cbGetPrepayId = function(data) {
  67. var pay = JSON.parse(data);
  68. var date = new Date();
  69. var timestamp = date.getTime().toString().substring(0, 10);
  70. if (JSON.parse(data).result_code == "SUCCESS") {
  71. var json = {
  72. appid : "wxf14d58cec986585b", //(必选)微信分配的AppID
  73. partnerid : "1234567890", //(必选)微信支付分配的商户号
  74. prepayid : "wx201506031538433160984eee0861221810", //(必选)微信返回的支付交易会话ID
  75. "package" : "Sign=WXPay", //(必选)暂填写固定值Sign=WXPay
  76. noncestr :"weradfdgdvccfexs", //(必选)随机字符串
  77. timestamp : "1412000000", //(必选)时间戳
  78. sign :"8FC5935C38628F44B924C838D760E33E"//(必选)签名}
  79. }
  80. var strrrr="appid=wxf14d58cec986585b&noncestr="+weradfdgdvccfexs+ "&package=Sign=WXPay&partnerid=1234567890&prepayid="+wx201506031538433160984eee0861221810+ "&timestamp=" + 1412000000 + "&key=0e857460d1b309130b9b1d2530ac094d";
  81. json.sign = hex_md5(strrrr).toUpperCase();
  82. uexWeiXin.startPay(JSON.stringify(json));
  83. }
  84. }
  85. });

5.编写微信授权函数和微信生成预支付订单函数,当点击微信支付Logo时打开支付界面。具体代码如下:

  1. function weixinpay() {
  2. uexWeiXin.registerApp('wxd930ea5d5a258f4f');
  3. }
  4. function getPrepayId() {
  5. var money;
  6. var userCouponId;
  7. if ($("#choose1").hasClass("true")) {
  8. } else {
  9. points = 0;
  10. }
  11. if ($("#choose2").hasClass("true")) {
  12. money = showBalance;
  13. } else {
  14. money = 0;
  15. }
  16. if ($('#coupon').html() == '满99元可以使用10元优惠券') {
  17. userCouponId = 'X';
  18. } else {
  19. userCouponId = userCoupon;
  20. }
  21. var date = new Date();
  22. var timestamp = date.getTime().toString().substring(0, 10);
  23. originAmount = money + last + couponPrice;
  24. alert("money:" + money + "last:" + last + "couponPrice:" + couponPrice);
  25. alert(originAmount);
  26. var param1 = {
  27. appid : "wxd930ea5d5a258f4f",
  28. mch_id : "1234567890",
  29. nonce_str : "weradfdgdvccfexs1",
  30. body : "海外购",
  31. detail : "detail",
  32. attach : orderId + "_" + originAmount + "_" + payRate + "_" + priceCode + "_" + money + "_" + points + "_" + userCouponId + "_" + "1",
  33. out_trade_no : timestamp,
  34. fee_type : "CNY",
  35. total_fee : 1, //last*100
  36. spbill_create_ip : "127.0.0.1",
  37. notify_url : api + "/api/trans/wxpay",
  38. trade_type : "APP",
  39. sign : "8FC5935C38628F44B924C838D760E33E"
  40. };
  41. Var stringSign="appid=wxd930ea5d5a258f4f&attach="+param1.attach+"&body="+param1.body+ "&detail="+param1.detail+"&fee_type=CNY&mch_id=1234567890&nonce_str=weradfdgdvccfexs1&notify_url="+param1.notify_url+"&out_trade_no="+param1.out_trade_no+&spbill_create_ip=127.0.0.1&total_fee=" + param1.total_fee + "&trade_type=APP&key=0e857460d1b309130b9b1d2530ac094d";
  42. var md = hex_md5(stringSign).toUpperCase();
  43. alert(param1.attach);
  44. param1.sign = md;
  45. var data1 = JSON.stringify(param1);
  46. uexWeiXin.getPrepayId(data1);
  47. }

效果如下:

支付功能 - 图3

6.编写支付宝设置商户信息函数以及支付功能函数,当点击支付宝Logo时打开支付界面。具体代码如下:

  1. function setInfo() {
  2. var money = 0;
  3. if ($("#choose2").hasClass("true")) {
  4. money = Number(showBalance);
  5. }
  6. if ($('#coupon').html() == '满99元可以使用10元优惠券') {
  7. var userCouponId = '';
  8. } else {
  9. var userCouponId = userCoupon;
  10. }
  11. originAmount = money + last + couponPrice;
  12. alert("money:" + money + "last:" + last + "couponPrice:" + couponPrice);
  13. alert(originAmount);
  14. notifyUrl = api + "/api/trans/alipay?orderId=" + orderId + "&originAmount=" + originAmount + "&priceCode=" + priceCode + "&rate=" + payRate + "&score=" + points + "&money=" + money + "&userCouponId=" + userCouponId + "&action=1" + "&total_fee=" + last;
  15. alert(notifyUrl);
  16. uexAliPay.setPayInfo(partner, seller, rsaPrivate, rsaPublic, notifyUrl);
  17. }
  18. function Alipay() {
  19. setInfo();
  20. var subject = "海外购" + num;
  21. var body = "订单内容";
  22. var fee = 0.01;
  23. uexAliPay.pay(num, subject, body, fee);
  24. }

效果如下:

支付功能 - 图4

按照上述方法,即可在AppCan应用中实现微信和支付宝支付。