123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- using System;
- using System.Collections.Generic;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Runtime.Serialization;
- using System.IO;
- using System.Text;
- using System.Net;
- using System.Web.Security;
- using LitJson;
- namespace LYFZ.WxPayAPI
- {
- public class JsApiPay
- {
-
-
-
- private Page page {get;set;}
-
-
-
- public string openid { get; set; }
-
-
-
- public string access_token { get; set; }
-
-
-
- public int total_fee { get; set; }
-
-
-
- public WxPayData unifiedOrderResult { get; set; }
- public JsApiPay(Page page)
- {
- this.page = page;
- }
-
- public void GetOpenidAndAccessToken()
- {
- if (!string.IsNullOrEmpty(page.Request.QueryString["code"]))
- {
-
- string code = page.Request.QueryString["code"];
- Log.Debug(this.GetType().ToString(), "Get code : " + code);
- GetOpenidAndAccessTokenFromCode(code);
- }
- else
- {
-
- string host = page.Request.Url.Host;
- string path = page.Request.Path;
- string redirect_uri = HttpUtility.UrlEncode("http://" + host + path);
- WxPayData data = new WxPayData();
- data.SetValue("appid", WxPayConfig.APPID);
- data.SetValue("redirect_uri", redirect_uri);
- data.SetValue("response_type", "code");
- data.SetValue("scope", "snsapi_base");
- data.SetValue("state", "STATE" + "#wechat_redirect");
- string url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + data.ToUrl();
- Log.Debug(this.GetType().ToString(), "Will Redirect to URL : " + url);
- try
- {
-
- page.Response.Redirect(url);
- }
- catch
- {
- }
- }
- }
-
- public void GetOpenidAndAccessTokenFromCode(string code)
- {
- try
- {
-
- WxPayData data = new WxPayData();
- data.SetValue("appid", WxPayConfig.APPID);
- data.SetValue("secret", WxPayConfig.APPSECRET);
- data.SetValue("code", code);
- data.SetValue("grant_type", "authorization_code");
- string url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + data.ToUrl();
-
- string result = HttpService.Get(url);
- Log.Debug(this.GetType().ToString(), "GetOpenidAndAccessTokenFromCode response : " + result);
-
- JsonData jd = JsonMapper.ToObject(result);
- access_token = (string)jd["access_token"];
-
- openid = (string)jd["openid"];
- Log.Debug(this.GetType().ToString(), "Get openid : " + openid);
- Log.Debug(this.GetType().ToString(), "Get access_token : " + access_token);
- }
- catch (Exception ex)
- {
- Log.Error(this.GetType().ToString(), ex.ToString());
- throw new WxPayException(ex.ToString());
- }
- }
-
- public WxPayData GetUnifiedOrderResult()
- {
-
- WxPayData data = new WxPayData();
- data.SetValue("body", "test");
- data.SetValue("attach", "test");
- data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());
- data.SetValue("total_fee", total_fee);
- data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
- data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
- data.SetValue("goods_tag", "test");
- data.SetValue("trade_type", "JSAPI");
- data.SetValue("openid", openid);
- WxPayData result = WxPayApi.UnifiedOrder(data);
- if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "")
- {
- Log.Error(this.GetType().ToString(), "UnifiedOrder response error!");
- throw new WxPayException("UnifiedOrder response error!");
- }
- unifiedOrderResult = result;
- return result;
- }
-
- public string GetJsApiParameters()
- {
- Log.Debug(this.GetType().ToString(), "JsApiPay::GetJsApiParam is processing...");
- WxPayData jsApiParam = new WxPayData();
- jsApiParam.SetValue("appId", unifiedOrderResult.GetValue("appid"));
- jsApiParam.SetValue("timeStamp", WxPayApi.GenerateTimeStamp());
- jsApiParam.SetValue("nonceStr", WxPayApi.GenerateNonceStr());
- jsApiParam.SetValue("package", "prepay_id=" + unifiedOrderResult.GetValue("prepay_id"));
- jsApiParam.SetValue("signType", "MD5");
- jsApiParam.SetValue("paySign", jsApiParam.MakeSign());
- string parameters = jsApiParam.ToJson();
- Log.Debug(this.GetType().ToString(), "Get jsApiParam : " + parameters);
- return parameters;
- }
-
- public string GetEditAddressParameters()
- {
- string parameter = "";
- try
- {
- string host = page.Request.Url.Host;
- string path = page.Request.Path;
- string queryString = page.Request.Url.Query;
-
- string url = "http://" + host + path + queryString;
-
- WxPayData signData = new WxPayData();
- signData.SetValue("appid",WxPayConfig.APPID);
- signData.SetValue("url", url);
- signData.SetValue("timestamp",WxPayApi.GenerateTimeStamp());
- signData.SetValue("noncestr",WxPayApi.GenerateNonceStr());
- signData.SetValue("accesstoken",access_token);
- string param = signData.ToUrl();
- Log.Debug(this.GetType().ToString(), "SHA1 encrypt param : " + param);
-
- string addrSign = FormsAuthentication.HashPasswordForStoringInConfigFile(param, "SHA1");
- Log.Debug(this.GetType().ToString(), "SHA1 encrypt result : " + addrSign);
-
- WxPayData afterData = new WxPayData();
- afterData.SetValue("appId",WxPayConfig.APPID);
- afterData.SetValue("scope","jsapi_address");
- afterData.SetValue("signType","sha1");
- afterData.SetValue("addrSign",addrSign);
- afterData.SetValue("timeStamp",signData.GetValue("timestamp"));
- afterData.SetValue("nonceStr",signData.GetValue("noncestr"));
-
- parameter = afterData.ToJson();
- Log.Debug(this.GetType().ToString(), "Get EditAddressParam : " + parameter);
- }
- catch (Exception ex)
- {
- Log.Error(this.GetType().ToString(), ex.ToString());
- throw new WxPayException(ex.ToString());
- }
- return parameter;
- }
- }
- }
|