首页 > 代码库 > C#微信开发之旅(十):APP预支付及支付参数生成(V2)

C#微信开发之旅(十):APP预支付及支付参数生成(V2)

App支付流程:

本篇随笔只实现红框内的两个功能:生成预支付Id,生成app支付参数

 1        /// <summary> 2         /// App 预支付 3         /// </summary> 4         /// <returns></returns> 5         public ActionResult AppPrePay() 6         { 7             string orderNo = ""; //订单编号,文档中的out_trade_no 8             string description = ""; //订单详情 9             string totalFee = "";//订单金额(单位:分)10             string notifyUrl = ""; //支付通知Url11             string createIp = "";//用户IP12 13             string traceId = string.Empty; //14 15             WxPayModel model = WxPayModel.Create(description, orderNo, totalFee, notifyUrl, createIp);16             //预支付17             var result = WeiXinHelper.PreWXPay(model.CreateAppPrePayPackage(traceId));18 19             if (!string.IsNullOrEmpty(result.PrePayId))20             {21                 Response.Write("预支付ID:" + result.PrePayId);22             }23             else24             {25                 Response.Write("预支付失败!");26             }27 28             //生成app支付json29             string appPayJson = model.CreateAppPayPackage(result.PrePayId);30 31             Response.Write("app支付Json:" + appPayJson);32 33             return View();34         }

下面是生成预支付json 和 app支付json的方法(均通过实际测试,可放心使用):

 1         /// <summary> 2         /// 生成app预支付请求json(已测试通过) 3         /// </summary> 4         /// <param name="traceid">交易号:自定义,可用于订单的查询和跟踪,建议根据支付用户信息生成此Id</param> 5         /// <returns></returns> 6         /// <remarks> 7         ///* { "appid":"wwwwb4f85f3a797777", "traceid":"crestxu", 8         ///* "noncestr":"111112222233333", "package": 9         ///* "bank_type=WX&body=XXX&fee_type=1&input_charset=GBK&notify_url=http%3a%2f%2f10         ///* www11         ///* .qq.com&out_trade_no=16642817866003386000&partner=1900000109&spbill_create_ip12         ///* =127.0.0.1&total_fee=1&sign=BEEF37AD19575D92E191C1E4B1474CA9",13         ///* "timestamp":1381405298,14         ///* "app_signature":"53cca9d47b883bd4a5c85a9300df3da0cb48565c",15         ///* "sign_method":"sha1" }16         /// </remarks>17         public string CreateAppPrePayPackage(string traceid)18         {19             Dictionary<string, string> nativeObj = new Dictionary<string, string>();20             if (CheckCftParameters() == false)21             {22                 throw new SDKRuntimeException("生成package参数缺失!");23             }24             nativeObj.Add("appid", AppId);25             nativeObj.Add("package", GetCftPackage());26             nativeObj.Add("timestamp", ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString());27             nativeObj.Add("traceid", traceid);28             nativeObj.Add("noncestr", CommonUtil.CreateNoncestr());29             nativeObj.Add("app_signature", GetBizSign(nativeObj));30             nativeObj.Add("sign_method", SignType);31 32             var entries = nativeObj.Select(d => string.Format("\"{0}\": \"{1}\"", d.Key, d.Value));33 34             return "{" + string.Join(",", entries.ToArray()) + "}";35         }36 37         /// <summary>38         /// 生成app支付请求json(已测试通过)39         /// </summary>40         /// <param name="prepayid">预支付id</param>41         /// <returns></returns>42         /// <remarks>43         /// { 44         /// "appid":"wwwwb4f85f3a797777",45         /// "noncestr":"111112222233333", 46         /// "package":"Sign=WXpay",47         /// "partnerid":"1900000109",48         /// "prepayid":"1101000000140429eb40476f4c9",49         /// "sign":"53cca9d47b883bd4a5c85a9300df3da0cb48565c",50         /// "timestamp":1381405298,51         ///  }52         /// </remarks>53         public string CreateAppPayPackage(string prepayid)54         {55             Dictionary<string, string> nativeObj = new Dictionary<string, string>();56             if (CheckCftParameters() == false)57             {58                 throw new SDKRuntimeException("生成package参数缺失!");59             }60             nativeObj.Add("appid", AppId);61             nativeObj.Add("noncestr", CommonUtil.CreateNoncestr());62             nativeObj.Add("package", "Sign=WXPay");63             nativeObj.Add("partnerid", GetPartnerId());64             nativeObj.Add("prepayid", prepayid);65             nativeObj.Add("timestamp", ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString());66             nativeObj.Add("sign", GetBizSign(nativeObj));67 68             var entries = nativeObj.Select(d => string.Format("\"{0}\": \"{1}\"", d.Key, d.Value));69 70             return "{" + string.Join(",", entries.ToArray()) + "}";71         }

 

C#微信开发之旅(十):APP预支付及支付参数生成(V2)