治疗坐骨神经痛痛的治疗方法WXTY

/ WxPayDemo_TY
项目语言:C#
权限:read-only(如需更高权限请先加入项目)
WxPayDemo_TY/
Index: MicroPay.cs
===================================================================
--- MicroPay.cs (revision 0)
+++ MicroPay.cs (revision 2)
@@ -0,0 +1,183 @@
+using System.Collections.G
+using System.W
+using System.T
+namespace WxPayAPI
public class MicroPay
* 刷卡支付完整业务流程逻辑
* @param body 商品描述
* @param total_fee 总金额
* @param auth_code 支付授权码
* @throws WxPayException
* @return 刷卡支付结果
public static string Run(string body, string total_fee, string auth_code)
(&MicroPay&, &Micropay is processing...&);
WxPayData data = new WxPayData();
data.SetValue(&auth_code&, auth_code);//授权码
data.SetValue(&body&, body);//商品描述
data.SetValue(&total_fee&, int.Parse(total_fee));//总金额
data.SetValue(&out_trade_no&, WxPayApi.GenerateOutTradeNo());//产生随机的商户订单号
WxPayData result = WxPayApi.Micropay(data, 10); //提交被扫支付,接收返回结果
//如果提交被扫支付接口调用失败,则抛异常
if (!result.IsSet(&return_code&) || result.GetValue(&return_code&).ToString() == &FAIL&)
string returnMsg = result.IsSet(&return_msg&) ? result.GetValue(&return_msg&).ToString() : &&;
Log.Error(&MicroPay&, &Micropay API interface call failure, result : & + result.ToXml());
throw new WxPayException(&Micropay API interface call failure, return_msg : & + returnMsg);
//签名验证
result.CheckSign();
Log.Debug(&MicroPay&, &Micropay response check sign success&);
//刷卡支付直接成功
if(result.GetValue(&return_code&).ToString() == &SUCCESS& &&
result.GetValue(&result_code&).ToString() == &SUCCESS&)
Log.Debug(&MicroPay&, &Micropay business success, result : & + result.ToXml());
return result.ToPrintStr();
/******************************************************************
* 剩下的都是接口调用成功,业务失败的情况
* ****************************************************************/
//1)业务结果明确失败
if(result.GetValue(&err_code&).ToString() != &USERPAYING& &&
result.GetValue(&err_code&).ToString() != &SYSTEMERROR&)
Log.Error(&MicroPay&, &micropay API interface call success, business failure, result : & + result.ToXml());
return result.ToPrintStr();
//2)不能确定是否失败,需查单
//用商户订单号去查单
string out_trade_no = data.GetValue(&out_trade_no&).ToString();
//确认支付是否成功,每隔一段时间查询一次订单,共查询10次
int queryTimes = 10;//查询次数计数器
while(queryTimes-- & 0)
int succResult = 0;//查询结果
WxPayData queryResult = Query(out_trade_no, out succResult);
//如果需要继续查询,则等待2s后继续
if(succResult == 2)
Thread.Sleep(2000);
//查询成功,返回订单查询接口返回的数据
else if(succResult == 1)
Log.Debug(&MicroPay&, &Mircopay success, return order query result : & + queryResult.ToXml());
return queryResult.ToPrintStr();
//订单交易失败,直接返回刷卡支付接口返回的结果,失败原因会在err_code中描述
Log.Error(&MicroPay&, &Micropay failure, return micropay result : & + result.ToXml());
return result.ToPrintStr();
//确认失败,则撤销订单
Log.Error(&MicroPay&, &Micropay failure, Reverse order is processing...&);
if(!Cancel(out_trade_no))
Log.Error(&MicroPay&, &Reverse order failure&);
throw new WxPayException(&Reverse order failure!&);
return result.ToPrintStr();
* 查询订单情况
* @param string out_trade_no
商户订单号
* @param int succCode
查询订单结果:0表示订单不成功,1表示订单成功,2表示继续查询
* @return 订单查询接口返回的数据,参见协议接口
public static WxPayData Query(string out_trade_no, out int succCode)
WxPayData queryOrderInput = new WxPayData();
queryOrderInput.SetValue(&out_trade_no&,out_trade_no);
WxPayData result = WxPayApi.OrderQuery(queryOrderInput);
if(result.GetValue(&return_code&).ToString() == &SUCCESS&
&& result.GetValue(&result_code&).ToString() == &SUCCESS&)
//支付成功
if(result.GetValue(&trade_state&).ToString() == &SUCCESS&)
succCode = 1;
//用户支付中,需要继续查询
else if(result.GetValue(&trade_state&).ToString() == &USERPAYING&)
succCode = 2;
//如果返回错误码为“此交易订单号不存在”则直接认定失败
if(result.GetValue(&err_code&).ToString() == &ORDERNOTEXIST&)
succCode = 0;
//如果是系统错误,则后续继续
succCode = 2;
* 撤销订单,如果失败会重复调用10次
* @param string out_trade_no 商户订单号
* @param depth 调用次数,这里用递归深度表示
* @return false表示撤销失败,true表示撤销成功
public static bool Cancel(string out_trade_no, int depth = 0)
if(depth & 10)
WxPayData reverseInput = new WxPayData();
reverseInput.SetValue(&out_trade_no&,out_trade_no);
WxPayData result = WxPayApi.Reverse(reverseInput);
//接口调用失败
if(result.GetValue(&return_code&).ToString() != &SUCCESS&)
//如果结果为success且不需要重新调用撤销,则表示撤销成功
if(result.GetValue(&result_code&).ToString() != &SUCCESS& && result.GetValue(&recall&).ToString() == &N&)
else if(result.GetValue(&recall&).ToString() == &Y&)
return Cancel(out_trade_no, ++depth);
\ No newline at end of file
Index: Refund.cs
===================================================================
--- Refund.cs (revision 0)
+++ Refund.cs (revision 2)
@@ -0,0 +1,42 @@
+using System.Collections.G
+using System.W
+namespace WxPayAPI
public class Refund
* 申请退款完整业务流程逻辑
* @param transaction_id 微信订单号(优先使用)
* @param out_trade_no 商户订单号
* @param total_fee 订单总金额
* @param refund_fee 退款金额
* @return 退款结果(xml格式)
public static string Run(string transaction_id, string out_trade_no, string total_fee, string refund_fee)
(&Refund&, &Refund is processing...&);
WxPayData data = new WxPayData();
if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准
data.SetValue(&transaction_id&, transaction_id);
else//微信订单号不存在,才根据商户订单号去退款
data.SetValue(&out_trade_no&, out_trade_no);
data.SetValue(&total_fee&, int.Parse(total_fee));//订单总金额
data.SetValue(&refund_fee&, int.Parse(refund_fee));//退款金额
data.SetValue(&out_refund_no&, WxPayApi.GenerateOutTradeNo());//随机生成商户退款单号
data.SetValue(&op_user_id&, WxPayConfig.MCHID);//操作员,默认为商户号
WxPayData result = WxPayApi.Refund(data);//提交退款申请给API,接收返回数据
(&Refund&, &Refund process complete, result : & + result.ToXml());
return result.ToPrintStr();
\ No newline at end of file
Index: ResultNotify.cs
===================================================================
--- ResultNotify.cs (revision 0)
+++ ResultNotify.cs (revision 2)
@@ -0,0 +1,77 @@
+using System.Collections.G
+using System.W
+using System.Web.UI;
+using System.Web.UI.WebC
+namespace WxPayAPI
/// &summary&
/// 支付结果通知回调处理类
/// 负责接收微信支付后台发送的支付结果并对订单有效性进行验证,将验证结果反馈给微信支付后台
/// &/summary&
public class ResultNotify:Notify
public ResultNotify(Page page):base(page)
public override void ProcessNotify()
WxPayData notifyData = GetNotifyData();
//检查支付结果中transaction_id是否存在
if (!notifyData.IsSet(&transaction_id&))
//若transaction_id不存在,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue(&return_code&, &FAIL&);
res.SetValue(&return_msg&, &支付结果中微信订单号不存在&);
Log.Error(this.GetType().ToString(), &The Pay result is error : & + res.ToXml());
page.Response.Write(res.ToXml());
page.Response.End();
string transaction_id = notifyData.GetValue(&transaction_id&).ToString();
//查询订单,判断订单真实性
if (!QueryOrder(transaction_id))
//若订单查询失败,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue(&return_code&, &FAIL&);
res.SetValue(&return_msg&, &订单查询失败&);
Log.Error(this.GetType().ToString(), &Order query failure : & + res.ToXml());
page.Response.Write(res.ToXml());
page.Response.End();
//查询订单成功
WxPayData res = new WxPayData();
res.SetValue(&return_code&, &SUCCESS&);
res.SetValue(&return_msg&, &OK&);
(this.GetType().ToString(), &order query success : & + res.ToXml());
page.Response.Write(res.ToXml());
page.Response.End();
//查询订单
private bool QueryOrder(string transaction_id)
WxPayData req = new WxPayData();
req.SetValue(&transaction_id&, transaction_id);
WxPayData res = WxPayApi.OrderQuery(req);
if (res.GetValue(&return_code&).ToString() == &SUCCESS& &&
res.GetValue(&result_code&).ToString() == &SUCCESS&)
\ No newline at end of file
Index: RefundQuery.cs
===================================================================
--- RefundQuery.cs (revision 0)
+++ RefundQuery.cs (revision 2)
@@ -0,0 +1,45 @@
+using System.Collections.G
+using System.W
+namespace WxPayAPI
public class RefundQuery
* 退款查询完整业务流程逻辑
* @param refund_id 微信退款单号(优先使用)
* @param out_refund_no 商户退款单号
* @param transaction_id 微信订单号
* @param out_trade_no 商户订单号
* @return 退款查询结果(xml格式)
public static string Run(string refund_id, string out_refund_no, string transaction_id, string out_trade_no)
(&RefundQuery&, &RefundQuery is processing...&);
WxPayData data = new WxPayData();
if(!string.IsNullOrEmpty(refund_id))
data.SetValue(&refund_id&, refund_id);//微信退款单号,优先级最高
else if(!string.IsNullOrEmpty(out_refund_no))
data.SetValue(&out_refund_no&, out_refund_no);//商户退款单号,优先级第二
else if(!string.IsNullOrEmpty(transaction_id))
data.SetValue(&transaction_id&, transaction_id);//微信订单号,优先级第三
data.SetValue(&out_trade_no&, out_trade_no);//商户订单号,优先级最低
WxPayData result = WxPayApi.RefundQuery(data);//提交退款查询给API,接收返回数据
(&RefundQuery&, &RefundQuery process complete, result : & + result.ToXml());
return result.ToPrintStr();
\ No newline at end of file
Index: DownloadBill.cs
===================================================================
--- DownloadBill.cs (revision 0)
+++ DownloadBill.cs (revision 2)
@@ -0,0 +1,32 @@
+using System.Collections.G
+using System.W
+namespace WxPayAPI
public class DownloadBill
* 下载对账单完整业务流程逻辑
* @param bill_date 下载对账单的日期(格式:,一次只能下载一天的对账单)
* @param bill_type 账单类型
ALL,返回当日所有订单信息,默认值
SUCCESS,返回当日成功支付的订单
REFUND,返回当日退款订单
REVOKED,已撤销的订单
* @return 对账单结果(xml格式)
public static string Run(string bill_date, string bill_type)
(&DownloadBill&, &DownloadBill is processing...&);
WxPayData data = new WxPayData();
data.SetValue(&bill_date&, bill_date);//账单日期
data.SetValue(&bill_type&, bill_type);//账单类型
WxPayData result = WxPayApi.DownloadBill(data);//提交下载对账单请求给API,接收返回结果
(&DownloadBill&, &DownloadBill process complete, result : & + result.ToXml());
return result.ToPrintStr();
\ No newline at end of file
Index: NativeNotify.cs
===================================================================
--- NativeNotify.cs (revision 0)
+++ NativeNotify.cs (revision 2)
@@ -0,0 +1,99 @@
+using System.Collections.G
+using System.W
+using System.Web.UI;
+using System.Web.UI.WebC
+namespace WxPayAPI
/// &summary&
/// 扫码支付模式一回调处理类
/// 接收微信支付后台发送的扫码结果,调用统一下单接口并将下单结果返回给微信支付后台
/// &/summary&
public class NativeNotify:Notify
public NativeNotify(Page page):base(page)
public override void ProcessNotify()
WxPayData notifyData = GetNotifyData();
//检查openid和product_id是否返回
if (!notifyData.IsSet(&openid&) || !notifyData.IsSet(&product_id&))
WxPayData res = new WxPayData();
res.SetValue(&return_code&, &FAIL&);
res.SetValue(&return_msg&, &回调数据异常&);
(this.GetType().ToString(), &The data WeChat post is error : & + res.ToXml());
page.Response.Write(res.ToXml());
page.Response.End();
//调统一下单接口,获得下单结果
string openid = notifyData.GetValue(&openid&).ToString();
string product_id = notifyData.GetValue(&product_id&).ToString();
WxPayData unifiedOrderResult = new WxPayData();
unifiedOrderResult = UnifiedOrder(openid, product_id);
catch(Exception ex)//若在调统一下单接口时抛异常,立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue(&return_code&, &FAIL&);
res.SetValue(&return_msg&, &统一下单失败&);
Log.Error(this.GetType().ToString(), &UnifiedOrder failure : & + res.ToXml());
page.Response.Write(res.ToXml());
page.Response.End();
//若下单失败,则立即返回结果给微信支付后台
if (!unifiedOrderResult.IsSet(&appid&) || !unifiedOrderResult.IsSet(&mch_id&) || !unifiedOrderResult.IsSet(&prepay_id&))
WxPayData res = new WxPayData();
res.SetValue(&return_code&, &FAIL&);
res.SetValue(&return_msg&, &统一下单失败&);
Log.Error(this.GetType().ToString(), &UnifiedOrder failure : & + res.ToXml());
page.Response.Write(res.ToXml());
page.Response.End();
//统一下单成功,则返回成功结果给微信支付后台
WxPayData data = new WxPayData();
data.SetValue(&return_code&, &SUCCESS&);
data.SetValue(&return_msg&, &OK&);
data.SetValue(&appid&, WxPayConfig.APPID);
data.SetValue(&mch_id&, WxPayConfig.MCHID);
data.SetValue(&nonce_str&, WxPayApi.GenerateNonceStr());
data.SetValue(&prepay_id&, unifiedOrderResult.GetValue(&prepay_id&));
data.SetValue(&result_code&, &SUCCESS&);
data.SetValue(&err_code_des&, &OK&);
data.SetValue(&sign&, data.MakeSign());
(this.GetType().ToString(), &UnifiedOrder success , send data to WeChat : & + data.ToXml());
page.Response.Write(data.ToXml());
page.Response.End();
private WxPayData UnifiedOrder(string openId,string productId)
//统一下单
WxPayData req = new WxPayData();
req.SetValue(&body&, &test&);
req.SetValue(&attach&, &test&);
req.SetValue(&out_trade_no&, WxPayApi.GenerateOutTradeNo());
req.SetValue(&total_fee&, 1);
req.SetValue(&time_start&, DateTime.Now.ToString(&yyyyMMddHHmmss&));
req.SetValue(&time_expire&, DateTime.Now.AddMinutes(10).ToString(&yyyyMMddHHmmss&));
req.SetValue(&goods_tag&, &test&);
req.SetValue(&trade_type&, &NATIVE&);
req.SetValue(&openid&, openId);
req.SetValue(&product_id&, productId);
WxPayData result = WxPayApi.UnifiedOrder(req);
\ No newline at end of file
Index: JsApiPay.cs
===================================================================
--- JsApiPay.cs (revision 0)
+++ JsApiPay.cs (revision 2)
@@ -0,0 +1,258 @@
+using System.Collections.G
+using System.W
+using System.Web.UI;
+using System.Web.UI.WebC
+using System.Runtime.S
+using System.IO;
+using System.T
+using System.N
+using System.Web.S
+using LitJ
+namespace WxPayAPI
public class JsApiPay
/// &summary&
/// 保存页面对象,因为要在类的方法中使用Page的Request对象
/// &/summary&
private Page page {}
/// &summary&
/// openid用于调用统一下单接口
/// &/summary&
public string openid { }
/// &summary&
/// access_token用于获取收货地址js函数入口参数
/// &/summary&
public string access_token { }
/// &summary&
/// 商品金额,用于统一下单
/// &/summary&
public int total_fee { }
/// &summary&
/// 统一下单接口返回结果
/// &/summary&
public WxPayData unifiedOrderResult { }
public JsApiPay(Page page)
this.page =
* 网页授权获取用户基本信息的全部过程
* 详情请参看网页授权获取用户基本信息:http://mp./wiki/17/c0f37d13d5d2c37b468d75.html
* 第一步:利用url跳转获取code
* 第二步:利用code去获取openid和access_token
public void GetOpenidAndAccessToken()
if (!string.IsNullOrEmpty(page.Request.QueryString[&code&]))
//获取code码,以获取openid和access_token
string code = page.Request.QueryString[&code&];
Log.Debug(this.GetType().ToString(), &Get code : & + code);
GetOpenidAndAccessTokenFromCode(code);
//构造网页授权获取code的URL
string host = page.Request.Url.H
string path = page.Request.P
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./connect/oauth2/authorize?& + data.ToUrl();
Log.Debug(this.GetType().ToString(), &Will Redirect to URL : & + url);
//触发微信返回code码
page.Response.Redirect(url);//Redirect函数会抛出ThreadAbortException异常,不用处理这个异常
catch(System.Threading.ThreadAbortException ex)
* 通过code换取网页授权access_token和openid的返回数据,正确时返回的JSON数据包如下:
&access_token&:&ACCESS_TOKEN&,
&expires_in&:7200,
&refresh_token&:&REFRESH_TOKEN&,
&openid&:&OPENID&,
&scope&:&SCOPE&,
&unionid&: &o6_bmasdasdsad6_2sgVt7hMZOPfL&
* 其中access_token可用于获取共享收货地址
* openid是微信支付jsapi支付接口统一下单时必须的参数
* 更详细的说明请参考网页授权获取用户基本信息:http://mp./wiki/17/c0f37d13d5d2c37b468d75.html
* @失败时抛异常WxPayException
public void GetOpenidAndAccessTokenFromCode(string code)
//构造获取openid及access_token的url
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./sns/oauth2/access_token?& + data.ToUrl();
//请求url以获取数据
string result = HttpService.Get(url);
Log.Debug(this.GetType().ToString(), &GetOpenidAndAccessTokenFromCode response : & + result);
//保存access_token,用于收货地址获取
JsonData jd = JsonMapper.ToObject(result);
access_token = (string)jd[&access_token&];
//获取用户openid
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());
* 调用统一下单,获得下单结果
* @return 统一下单结果
* @失败时抛异常WxPayException
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 =
* 从统一下单成功返回的数据中获取微信浏览器调起jsapi支付所需的参数,
* 微信浏览器调起JSAPI时的输入参数格式如下:
&appId& : &wx0ec43b&,
//公众号名称,由商户传入
&timeStamp&:& &,
//时间戳,自1970年以来的秒数
&nonceStr& : &e61463f8efacccfbbb444&, //随机串
&package& : &prepay_id=u802345jgfjsdfgsdg888&,
&signType& : &MD5&,
//微信签名方式:
&paySign& : &70EABB79628FBCAFADD89& //微信签名
* @return string 微信浏览器调起JSAPI时的输入参数,json格式可以直接做参数用
* 更详细的说明请参考网页端调起支付API:http://pay./wiki/doc/api/jsapi.php?chapter=7_7
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);
* 获取收货地址js函数入口参数,详情请参考收货地址共享接口:http://pay./wiki/doc/api/jsapi.php?chapter=7_9
* @return string 共享收货地址js函数需要的参数,json格式可以直接做参数使用
public string GetEditAddressParameters()
string parameter = &&;
string host = page.Request.Url.H
string path = page.Request.P
string queryString = page.Request.Url.Q
//这个地方要注意,参与签名的是网页授权获取用户信息时微信后台回传的完整url
string url = &http://& + host + path + queryS
//构造需要用SHA1算法加密的数据
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);
//SHA1加密
string addrSign = FormsAuthentication.HashPasswordForStoringInConfigFile(param, &SHA1&);
Log.Debug(this.GetType().ToString(), &SHA1 encrypt result : & + addrSign);
//获取收货地址js函数入口参数
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&));
//转为json格式
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());
\ No newline at end of file
Index: NativePay.cs
===================================================================
--- NativePay.cs (revision 0)
+++ NativePay.cs (revision 2)
@@ -0,0 +1,75 @@
+using System.Collections.G
+using System.W
+namespace WxPayAPI
public class NativePay
* 生成扫描支付模式一URL
* @param productId 商品ID
* @return 模式一URL
public string GetPrePayUrl(string productId)
(this.GetType().ToString(), &Native pay mode 1 url is producing...&);
WxPayData data = new WxPayData();
data.SetValue(&appid&, WxPayConfig.APPID);//公众帐号id
data.SetValue(&mch_id&, WxPayConfig.MCHID);//商户号
data.SetValue(&time_stamp&, WxPayApi.GenerateTimeStamp());//时间戳
data.SetValue(&nonce_str&, WxPayApi.GenerateNonceStr());//随机字符串
data.SetValue(&product_id&, productId);//商品ID
data.SetValue(&sign&, data.MakeSign());//签名
string str = ToUrlParams(data.GetValues());//转换为URL串
string url = &weixin://wxpay/bizpayurl?& +
(this.GetType().ToString(), &Get native pay mode 1 url : & + url);
* 生成直接支付url,支付url有效期为2小时,模式二
* @param productId 商品ID
* @return 模式二URL
public string GetPayUrl(string productId)
(this.GetType().ToString(), &Native pay mode 2 url is producing...&);
WxPayData data = new WxPayData();
data.SetValue(&body&, &test&);//商品描述
data.SetValue(&attach&, &test&);//附加数据
data.SetValue(&out_trade_no&, WxPayApi.GenerateOutTradeNo());//随机字符串
data.SetValue(&total_fee&, 1);//总金额
data.SetValue(&time_start&, DateTime.Now.ToString(&yyyyMMddHHmmss&));//交易起始时间
data.SetValue(&time_expire&, DateTime.Now.AddMinutes(10).ToString(&yyyyMMddHHmmss&));//交易结束时间
data.SetValue(&goods_tag&, &jjj&);//商品标记
data.SetValue(&trade_type&, &NATIVE&);//交易类型
data.SetValue(&product_id&, productId);//商品ID
WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
string url = result.GetValue(&code_url&).ToString();//获得统一下单接口返回的二维码链接
(this.GetType().ToString(), &Get native pay mode 2 url : & + url);
* 参数数组转换为url格式
* @param map 参数名与参数值的映射表
* @return URL字符串
private string ToUrlParams(SortedDictionary&string, object& map)
string buff = &&;
foreach (KeyValuePair&string, object& pair in map)
buff += pair.Key + &=& + pair.Value + &&&;
buff = buff.Trim('&');
\ No newline at end of file
Index: OrderQuery.cs
===================================================================
--- OrderQuery.cs (revision 0)
+++ OrderQuery.cs (revision 2)
@@ -0,0 +1,35 @@
+using System.Collections.G
+using System.W
+namespace WxPayAPI
public class OrderQuery
* 订单查询完整业务流程逻辑
* @param transaction_id 微信订单号(优先使用)
* @param out_trade_no 商户订单号
* @return 订单查询结果(xml格式)
public static string Run(string transaction_id, string out_trade_no)
(&OrderQuery&, &OrderQuery is processing...&);
WxPayData data = new WxPayData();
if(!string.IsNullOrEmpty(transaction_id))//如果微信订单号存在,则以微信订单号为准
data.SetValue(&transaction_id&, transaction_id);
else//微信订单号不存在,才根据商户订单号去查单
data.SetValue(&out_trade_no&, out_trade_no);
WxPayData result = WxPayApi.OrderQuery(data);//提交订单查询请求给API,接收返回数据
(&OrderQuery&, &OrderQuery process complete, result : & + result.ToXml());
return result.ToPrintStr();
\ No newline at end of file
(C)&&2013&&Alibaba&&Inc.&&All&&rights&&resvered.
Powered by

我要回帖

更多关于 治疗坐骨神经痛 的文章

 

随机推荐