php专区

 首页 > php专区 > PHP应用 > 开放平台 > C#微信开发之旅(十):APP预支付及支付参数生成

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

分享到:
【字体:
导读:
          App支付流程:本篇随笔只实现红框内的两个功能:生成预支付Id,生成app支付参数 summary 2 App 预支付 3 summary 4...

App支付流程:

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

     /// 
 2         /// App 预支付
 3         /// 
 4         /// 
 5         public ActionResult AppPrePay()
 6         {
 7             string orderNo = ""; //订单编号,文档中的out_trade_no
 8             string description = ""; //订单详情
 9             string totalFee = "";//订单金额(单位:分)
10             string notifyUrl = ""; //支付通知Url
11             string createIp = "";//用户IP
12 
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             else
24             {
25                 Response.Write("预支付失败!");
26             }
27 
28             //生成app支付json
29             string appPayJson = model.CreateAppPayPackage(result.PrePayId);
30 
31             Response.Write("app支付Json:" + appPayJson);
32 
33             return View();
34         }

 

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

 1         /// 
 2         /// 生成app预支付请求json(已测试通过)
 3         /// 
 4         /// 交易号:自定义,可用于订单的查询和跟踪,建议根据支付用户信息生成此Id
 5         /// 
 6         /// 
 7         ///* { "appid":"wwwwb4f85f3a797777", "traceid":"crestxu",
 8         ///* "noncestr":"111112222233333", "package":
 9         ///* "bank_type=WX&body=XXX&fee_type=1&input_charset=GBK¬ify_url=http%3a%2f%2f
10         ///* www
11         ///* .qq.com&out_trade_no=16642817866003386000&partner=1900000109&spbill_create_ip
12         ///* =127.0.0.1&total_fee=1&sign=BEEF37AD19575D92E191C1E4B1474CA9",
13         ///* "timestamp":1381405298,
14         ///* "app_signature":"53cca9d47b883bd4a5c85a9300df3da0cb48565c",
15         ///* "sign_method":"sha1" }
16         /// 
17         public string CreateAppPrePayPackage(string traceid)
18         {
19             Dictionary nativeObj = new Dictionary();
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         /// 
38         /// 生成app支付请求json(已测试通过)
39         /// 
40         /// 预支付id
41         /// 
42         /// 
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         /// 
53         public string CreateAppPayPackage(string prepayid)
54         {
55             Dictionary nativeObj = new Dictionary();
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#微信公众号开发系列教程二(新手接入指...
微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微信服务器将接收到的消息post到用户接入时填写的url中,在url处理程序中,首先判断消息的合法性,判断成功后根据消息体的内容做相应的相应。原理很容易理解,接触过socket的可能理解起来更容易。 ...
C#微信开发之旅(九):JSAPI支付(V3) - 微...
微信开发遇到最复杂的就是支付了,无论V2还是V3。这篇文章将给出全套的V3版本JSAPI支付代码,包括预支付->支付->订单查询->通知->退款,其中前三步已经上线应用,退款只是简单测试了一下,大家要用的话需要谨慎。。。 一、预支付&支付 实际就是讲订单信息交给微信端,返回给我们一个预支付id(与V2app支付相似),支付时...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……