asp.net微信支付打通发货通知代码
上次遇到微信支付,发货接口的时候,官方的demo也没有提供相应的代码 ,因本人技术有限,百度 google 很久都没有asp.net 版本的,最后只好硬着头皮自己搞,没想到官方文档也是错的。 我这一步是在支付完成之后做的回调 首先是获取access_token http 请求方式: GET
地址:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret
=APPSECRET
这里我分享一个获取的方法 //AccessToken
public string GetToken()
{
if (AccessToken != "")
return AccessToken; string res = "";
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + System.Configuration.ConfigurationManager.AppSettings["appid"].ToString() + "&secret=" + System.Configuration.ConfigurationManager.AppSettings["secret"].ToString());
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd(); // List<ACCESSTOKEN> myACCESSTOKEN = FluorineFx.Json.JSONStringToList<ACCESSTOKEN>(content);
JavaScriptSerializer jser = new JavaScriptSerializer();
ACCESSTOKEN myACCESSTOKEN = jser.Deserialize<ACCESSTOKEN>(content); //反序列化 res = myACCESSTOKEN.access_token; }
AccessToken = res;
return res;
} [Serializable]
public class ACCESSTOKEN
{
public string access_token;
public string expires_in;
} 有了accesstoken 就可以post PostData数据到微信服务器了, 这里我先将postData数据排列到json里面,坑坑的,微信官方文档json参数的顺序是错的,需要按照a-z的顺序,这里我就没有sort数据直接排序了。 String Timestamp = TenpayUtil.getTimestamp(); string str = "appid=" + System.Configuration.ConfigurationManager.AppSettings["appid"].ToString() + "&appkey=" + System.Configuration.ConfigurationManager.AppSettings["Appkey"].ToString() + "&deliver_msg=ok&deliver_status=1&deliver_timestamp=" + Timestamp + "&openid=openid&out_trade_no=out_trade_no&transid=transid";
Response.Write(str);
AppSignature = getSha1(str).ToLower();
Response.Write("AppSignature:"+AppSignature);
WriteLog("AppSignature:" + AppSignature); string postData = "{\"appid\": \"" + System.Configuration.ConfigurationManager.AppSettings["appid"].ToString() + "\",\"openid\": \"openid\",\"transid\": \"transid\",\"out_trade_no\": \"out_trade_no\",\"deliver_timestamp\": \"" + Timestamp + "\", \"deliver_status\": \"1\",\"deliver_msg\": \"ok\",\"app_signature\":\"" + AppSignature + "\",\"sign_method\":\"sha1\"}";
WriteLog("PostDate:" + postData); //sha1加密是用微信官方的 public static String getSha1(String str)
{
//建立SHA1对象
SHA1 sha = new SHA1CryptoServiceProvider();
//将mystr转换成byte[]
ASCIIEncoding enc = new ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(str);
//Hash运算
byte[] dataHashed = sha.ComputeHash(dataToHash);
//将运算结果转换成string
string hash = BitConverter.ToString(dataHashed).Replace("-", "");
return hash;
} 这里最后用了一个GetPage 后台Post数据包GetPost 给微信服务器就可以了 public string GetPage(string posturl, string postData)
{
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
request = WebRequest.Create(posturl) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
outstream = request.GetRequestStream();
outstream.Write(data, , data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.Empty;
WriteLog("content:" + content);
return content;
}
catch (Exception ex)
{
string err = ex.Message;
Response.Write(err); WriteLog("err:" + err);
return string.Empty;
}
} 最后直接在你的backurl(回调页面发送请求就可以了) /// <summary>
/// 回调发货通知
/// </summary>
public void RollBack()
{
String Timestamp = TenpayUtil.getTimestamp(); string str = "appid=" + System.Configuration.ConfigurationManager.AppSettings["appid"].ToString() + "&appkey=" + System.Configuration.ConfigurationManager.AppSettings["Appkey"].ToString() + "&deliver_msg=ok&deliver_status=1&deliver_timestamp=" + Timestamp + "&openid=oF2a_t8-&out_trade_no=out_trade_no&transid=transid";
Response.Write(str);
AppSignature = getSha1(str).ToLower();
Response.Write("AppSignature:"+AppSignature);
WriteLog("AppSignature:" + AppSignature); string postData = "{\"appid\": \"" + System.Configuration.ConfigurationManager.AppSettings["appid"].ToString() + "\",\"openid\": \"oF2a_t8-\",\"transid\": \"transid\",\"out_trade_no\": \"out_trade_no\",\"deliver_timestamp\": \"" + Timestamp + "\", \"deliver_status\": \"1\",\"deliver_msg\": \"ok\",\"app_signature\":\"" + AppSignature + "\",\"sign_method\":\"sha1\"}";
WriteLog("PostDate:" + postData); string access_token = GetToken();
Response.Write("access_token" + access_token);
string i = GetPage("https://api.weixin.qq.com/pay/delivernotify?access_token=" + access_token, postData); Response.Write("postdate"+postData); } 有需要的也可以留言交流.
asp.net微信支付打通发货通知代码的更多相关文章
- java做微信支付notify_url异步通知服务端的写法
最近团队在接入微信支付,APP和JSAPI的接口都需要填写一个notify_url回调地址,但是坑爹的官方文档并没有找到JSAPI模式的java版的demo,所以不得不自己看文档写了一个接受微信异步通 ...
- asp.net 微信支付 错误解决方案
asp.net 微信支付 错误解决方案 在网上看到有人解决方案为: 解决方法 出现这种错误网上查出现有的原因是: 订阅号没有相关的权限 账号没有认证,没有相关的权限 那么这里遇到问题两种都不是.开发账 ...
- ASP.NET 微信支付
一.在支付前期,我们需要获取用户的OpenId,此块内容只针对于JSAPI(微信中直接支付)才需要,如果生成二维码(NATIVE)扫描支付,请跳过此步骤 思路大致是:获取用户的code值 > 根 ...
- ASP.NET微信支付XXE漏洞修复
1. XXE场景 关于XML解析存在的安全问题指引 微信支付商户,最近暴露的XML外部实体注入漏洞(XML External Entity Injection,简称 XXE),该安全问题是由XML组件 ...
- asp.net微信支付发起页面jsapi.aspx
jsapi.aspx 后台核心代码 //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(Context); //初始化 p ...
- 微信支付没有结果通知,notify_url参数的接口没有收到微信支付结果通知
在微信支付统一下单的时候需要填一个notify_url参数用于处理微信支付结果通知 但是,有时候我们发现我们设置的这个接口收不到微信请求.原因有一下几个,大家一一对照,也欢迎补充. 1. url是否可 ...
- Asp.Net微信支付接口之jsApiPay教程
1.微信支付JsApiPay只能在微信浏览器中使用 2.必须先申请微信支付功能 3.设置域名 4.设置支付授权目录 一定要精确到最后一级目录 5.获取APPID和AppSecret AppSecr ...
- 微信支付v2开发(6) 发货通知
本文介绍微信支付中发货通知功能的实现. 一.发货通知 为了更好地跟踪订单的情况,需要第三方在收到最终支付通知之后,调用发货通知API告知微信后台该订单的发货状态. 发货时间限制:虚拟.服务类24小时内 ...
- 怎样调通微信支付及微信发货通知接口(Js API)
怎样调通微信支付及微信发货通知接口(Js API) 微信支付提供了一个支付測试页面,微信支付正式使用须要測通支付.发货通知接口 .告警接口.维权接口.告警接口.维权接口非常easy.支付界面调通也相对 ...
随机推荐
- ASP.NET MVC 前端(View)向后端(Controller)中传值
在MVC中,要把前端View中的值传递给后端Controller, 主要有两种方法 1. 利用Request.Form 或者 Request.QueryString public ActionResu ...
- Codeforces Round #349 (Div. 2) D. World Tour (最短路)
题目链接:http://codeforces.com/contest/667/problem/D 给你一个有向图,dis[i][j]表示i到j的最短路,让你求dis[u][i] + dis[i][j] ...
- MsSQL的游标的综合运用
USE [ChiefWMS]GO/****** Object: StoredProcedure [dbo].[WMS_Check] Script Date: 04/05/2016 09:51:13 * ...
- pygame简单动态图 & 动态图片的移动
之前在学pygame 时看了一些博客(来自http://eyehere.net/2011/python-pygame-novice-professional-plant-zombie-1/),觉得写得 ...
- LVM 创建分区扩展分区记录
LVM 原理 图片来自百度百科 测试环境centOS 7 LVM version: 2.02.115(2)-RHEL7 (2015-01-28) ...
- 一次线上OOM故障排查经过
转贴:http://my.oschina.net/flashsword/blog/205266 本文是一次线上OOM故障排查的经过,内容比较基础但是真实,主要是记录一下,没有OOM排查经验的同学也可以 ...
- 【android-cocos2d-X 环境配置】在Mac下搭建Cocos2d-X-android开发环境!
转自:http://blog.csdn.net/dingkun520wy/article/details/17097593 (1)下载 首先要下载好要用到的东西: 1.android-SDK 地址是 ...
- 数据字符集mysql主从数据库,分库分表等笔记
文章结束给大家来个程序员笑话:[M] 1.mysql的目录:在rpm或者yum安装时:/var/lib/mysql 在编译安装时默许目录:/usr/local/mysql 2.用rpm包安装的MyS ...
- android 关于提高第三方app的service优先级
本博客仅仅要没有注明"转".那么均为原创,转贴请注明本博客链接链接 基本上大家都知道提高service优先级能够在非常大程度上让你的service免于由于内存不足而被kill,当然 ...
- WIN8重见开始菜单
从win7进入win8感觉不适应,做为一个程序开发人员,更觉得不爽,因此想着如何恢复开始菜单,查了很多文章终于找到方法 首先,在桌面版Windows 8启动资源管理器,单击工具栏上的“查看”选项卡后, ...