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.支付界面调通也相对 ...
随机推荐
- [iOS微博项目 - 2.0] - OAuth授权3步
A.概念 OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用 ...
- ASP.NET WebForm中前台代码如何绑定后台变量
转载自 http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html 经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有& ...
- HTML5几种常见的错误写法
本文介绍了HTML5常见的6种错误写法,包括:1.不要使用section作为div的替代品 2.只在需要的时候使用header和hgroup 3.不要把所有列表式的链接放在nav里 4.figure元 ...
- 创建类模式(一):工厂方法(Factory Method)
定义 此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦.复用和方便后期维护拓展的目的. 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心 ...
- C++中void型指针
问题由来: PX_FORCE_INLINE void* operator new(size_t size, const char* handle, const char * filename, int ...
- static关键字修饰类
今天继续研究公司的新项目,据说是京东的架构,研究看了一番,果然很牛逼,大致是Maven+spingmvc+spring+mybatis+ehcache+velocity来搭建的,数据库用的是mysql ...
- C字符串压缩算法
#include <iostream> #include <stdlib.h> //#include <algorithm> using namespace std ...
- 查看数量linux下查看cpu物理个数和逻辑个数
首先声明,我是一个菜鸟.一下文章中出现技术误导情况盖不负责 hadoop@chw-desktop3:~$ cat /proc/cpuinfo processor : 0 vendor_id : Gen ...
- Codeforces Round #115 A. Robot Bicorn Attack 暴力
A. Robot Bicorn Attack Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/17 ...
- pjsip视频通信开发(上层应用)之数字键盘的制作
在pjsip视频通信开发(上层应用)之EditText重写中我制作了一个显示输入内容的EditText,这里将制作一个数字键盘,其实跟计算器一样,最多的就是用TableLayout来实现,内部通过权重 ...