C# 微信共享收货地址 V1.6
//使用微信共享收货地址在跳转到当前页面的路径上必须要包含Code和state这两个获取用户信息的参数
//例如 <a href="ProductOrder.aspx?OID=<%=dr["ID"].ToString() %>&SID=<%=SID %>&code=<%=code%>&state=1&showwxpaytitle=1" //class="right" >安全支付</a>
<script type="text/javascript">
//前台微信共享收货地址
function editAddress() {
var URL = window.location.href; //当前页面的路径
$.ajax({
type: "POST",
url: "/***/handler/OrderWaitHandler.ashx",
data: "otype=Address&path=" + URL,
async: false,
success: function (msg) {
if (msg == "-99") {
ShowFW_Guanzhu("请先关注该公众号,再进行下单操作!");
} else if (msg == "-98") {
ShowFW("出现未知的错误,请联系管理员!");
} else {
var argument = msg.split(",");
WeixinJSBridge.invoke('editAddress', {
"appId": argument[0], //公众号AppID
"scope": "jsapi_address", //获得权限
"signType": "sha1", //加密方法
"addrSign": argument[1], //签名
"timeStamp": argument[2], //时间戳
"nonceStr": argument[3] //随机字符串
}, function (res) {
if (res.err_msg == "edit_address:ok") {
//收货信息赋值
document.getElementById("UserName").value = res.userName;
document.getElementById("telNumber").value = res.telNumber;
document.getElementById("firstName").value = res.proviceFirstStageName;
document.getElementById("secondName").value = res.addressCitySecondStageName;
document.getElementById("thirdName").value = res.addressCountiesThirdStageName;
document.getElementById("detalInfo").value = res.addressDetailInfo;
}
});
}
}
});
}
</script>
/// <summary>
/// 共享收货地址
/// </summary>
/// <param name="context"></param>
/// <param name="returnMsg"></param>
/// <returns></returns>
private bool EditAddress(HttpContext context, ref string returnMsg)
{
try
{
string AccessToken = "";//AccessToken
string URL = context.Request["path"].Trim().ToString() + "&SID=1&code=" + context.Session["code"].ToString() + "&state=1&showwxpaytitle=1"; //当前页面的URL
if (context.Session["UID"] == null || context.Session["UID"].ToString() == "0" || context.Session["UID"].ToString() == "")
{
returnMsg = "-99";//请先关注公众号,才能进行下订单操作
return false;
}
if (context.Session["accessToken"] != null || context.Session["accessToken"].ToString() != "")
{
AccessToken = context.Session["accessToken"].ToString(); //通过Oauth2获取的AccessToken
string Nonce = CreateRandomCode(15).ToLower(); //随机字符串
string time = ConvertDateTimeInt(DateTime.Now).ToString();//时间戳
string sha1 = "accesstoken=" + AccessToken +
"&appid=" + PayHandle.AppID.ToString() + //公众号APPID
"&noncestr=" + Nonce +
"×tamp=" + time +
"&url=" + URL;
string sha =Hash(sha1).ToLower(); //HASH加密
returnMsg = PayHandle.AppID.ToString() + "," + sha + "," + time + "," + Nonce;//共享收货地址请求参数
return true;
}
else
{
returnMsg = "-99";//请先关注公众号,才能进行下订单操作
return false;
}
}
catch (Exception ex)
{
T9.Util.LogUtil.WriteLog(ex.Message + "\r\n" + ex.StackTrace, "WebLog");
returnMsg = "-98";
return false;
}
}
/// <summary>
/// 生成随机字符串
/// </summary>
/// <param name="codeCount"></param>
/// <param name="allChar"></param>
/// <returns></returns>
public static string CreateRandomCode(int codeCount)
{
//验证码中的出现的字符,避免了一些容易混淆的字符。
string allChar = "3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,T,U,W,X,Y";
string[] allCharArray = allChar.Split(',');
string randomCode = "";
int temp = -1;
bool breCreate = (codeCount < 6 && allCharArray.Length > 15);
Random rand = new Random();
for (int i = 0; i < codeCount; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next(allCharArray.Length);
if (temp == t && breCreate)
{
return CreateRandomCode(codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}
/// <summary>
/// datetime转换为unixtime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
/// <summary>
/// Hash算法
/// </summary>
/// <param name="myStr"></param>
/// <returns></returns>
public string Hash(string myStr)
{
//建立SHA1对象
SHA1 sha = new SHA1CryptoServiceProvider();
//将mystr转换成byte[]
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(myStr);
//Hash运算
byte[] dataHashed = sha.ComputeHash(dataToHash);
//将运算结果转换成string
string hash = BitConverter.ToString(dataHashed).Replace("-", "");
return hash;
}
C# 微信共享收货地址 V1.6的更多相关文章
- 微信共享收货地址 edit_address:fail 吐白沫级解决方案
又被微信坑了一整天,看完官方文档怎么测试都不通过,我一直怀疑是新版本微信支付我没有设置“共享收货地址”开关造成的. 后来经过验证,新版本不需要做这件事了. 那么,我没错,是微信的文档没及时更新... ...
- 微信支付开发(7) 收货地址共享接口V2
关键字:微信公众平台 JSSDK 发送给朋友 收货地址共享接口 openAddress 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-open ...
- 微信支付v3开发(6) 收货地址共享接口
请看新版教程 微信支付开发(7) 收货地址共享接口V2 本文介绍微信支付下的收货地址共享接口的开发过程. 一. 简单介绍 微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,兴许能够免填 ...
- 微信小程序-收货地址左滑删除
我参照了其中的部分代码,如:bindtouchstart,bindtouchmove,bindtouchend事件多数组中偏移值的更改, 在结合微信 movable-area 和 movable-vi ...
- ecshop 订单-》设置默认收货地址,或者删除
设置位置:ecs_users标的 country字段,默认是0,默认地址是 users_address 的address_id 设置默认收货地址 /** * 设置默认地址 * * @access ...
- 【地图API】收货地址详解2
上次讲解的方法是: 在地图中心点添加一个标注,每次拖动地图就获取地图中心点,再把标注的位置设置为地图中心点.可参考教程:http://www.cnblogs.com/milkmap/p/6126424 ...
- GWYAlertSelectView 选择收货地址和选择联系人
iOS 开发在app内(特别是在类似购物和旅游类)经常会用到选择,添加联系人和收货地址,而且经常都是在跳转界面,很是麻烦,今天我就自己封装了一个类似弹出视图的代码,方便了很多!demo地址: http ...
- 方便代理下单的EcStore收货地址一键分析插件,同时支持淘宝/京东/一号店
使用EcStore开展分销的网站,代理需要经常代客下单,每个客户收货地址都不同,要选择和填写多个内容才能完成地址输入:省.市.区.详细地址.收货人姓名.手机电话等,非常麻烦,也容易输入错误.安装EcS ...
- DRF 商城项目 - 用户操作(收藏, 留言, 收货地址)
个人收藏 整体逻辑类似于 个人中心 ( 个人中心的相关逻辑梳理详情 点击这里 ) 也是两个序列化组价的分流 查看收藏 ( list ) 详情指向 收藏详情 的组价 创建收藏 ( create ) ...
随机推荐
- 学习 | css3基本动画之demo篇
移动端使用的框架是zepto,但是zepto的内置对象没有传统的animate这个方法,效果都是需要css3来实现的,zepto也不支持fadeIn和fadeOut等一些基本的动画,基于这一现状,我自 ...
- Python接口自动化测试01
1)环境准备: 接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对性的 ...
- goto 无条件跳转
0. 基本模型 goto 顾言思义,是跳转的意思. goto 后接一个标签,这个标签的意义是告诉 Go程序下一步要执行哪里的代码. 所以这个标签如何放置,放置在哪里,是 goto 里最需要注意的. g ...
- JDK动态代理学习心得
JDK动态代理是代理模式的一种实现方式,其只能代理接口.应用甚为广泛,比如我们的Spring的AOP底层就有涉及到JDK动态代理(此处后面可能会分享) 1.首先来说一下原生的JDK动态代理如何实现: ...
- 大数据平台Hadoop集群搭建
一.概念 Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce.HDFS是一个分布式文件系统,类似mogilef ...
- 微信小程序结合微信公众号进行消息发送
微信小程序结合微信公众号进行消息发送 由于小程序的模板消息已经废弃了,官方让使用订阅消息功能.而订阅消息的使用限制比较大,用户必须得订阅.需要获取用户同意接收消息的权限.用户必须得和小程序有交互的时候 ...
- Python-序列反转和序列反转协议-reversed __reversed__
reversed 将序列反转,依次把最后的元素放到第一个位置,把第一元素放到最后一个位置,变成生成器对象 name = "beimenchuixue" print(next(rev ...
- Leetcode-剪枝
51. N皇后 https://leetcode-cn.com/problems/n-queens/ n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. ...
- 联赛模拟测试10 C. 射手座之日
题目描述 分析 方法一(线段树) 线段树维护的是以当前节点为左端点的区间的贡献 而区间的右端点则会从 \(1\) 到 \(n\) 逐渐右移 当我们把右端点从 \(i-1\) 的位置扩展到 \(i\) ...
- python中的filter、map、reduce、apply用法总结
1. filter 功能: filter的功能是过滤掉序列中不符合函数条件的元素,当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数. 调用: filter(function,seq ...