微信APP支付 C#
微信APP支付服务端开发总结(走过的坑,一定要留下痕迹)
更多相关代码在文章结尾
一、配置文件,将appid、mch_id、 key、notify_url、trade_type写在配置文件中或者写在一个专门的类中
二、解析微信服务端返回的数据建议用XDocument
三、API调用
1、统一下单接口处理,这个接口中主要获得prepay_id,并传给客户端,这个接口中有两次签名,可以封装下
其中需要注意的地方 total_fee 的单位是分,也就是没有小数,否则会返回invalid total_fee .(这个可以服务端处理也可以客户端处理,将传过来的参数值变换成单位为分的数额即可)
还有要注意的是签名的Key需要按ASCII码值从小到大排序,这个最好写一个统一的方法生成xml.
2、回调函数,一般微信均会成功回调,我做的项目中因为有拦截,所以没有调取成功,因此在app回调时一直返回签名错误,调试发现transaction_id为空也就是在回调到时候没有返回。
这个接口中主要实现支付成功后的逻辑,要保证安全性,所以要做签名验证、和查询订单来确保程序正常执行了。
3、APP回调接口,主要是支付成功后,app调取这个接口进行主动查询,看是否真的成功,这个接口中需要注意的就是逻辑的处理了,如果查询订单成功,并且财务表查询已经支付,那就返回客户端支付成功;若是查询订单是成功的但是财务表查到的是没有支付,那么就要进行相应的逻辑处理,或者让客户联系客服。建议进行与回调函数中相同的处理。
4、支付的整个代码中一定要及时的记录相应的日志,以便于查找相应的错误。
四、相关代码
private static SortedDictionaryCreateWapAndAppPayParam(string noncestr, string transaction_id){SortedDictionarydic = new SortedDictionary();dic.Add("appid", WePayConfig.IOS_CZ_Appid);//公众账号IDdic.Add("mch_id", WePayConfig.Mch_id);//商户号dic.Add("nonce_str", noncestr);//随机字符串transaction_iddic.Add("transaction_id", transaction_id);return dic;}public static string GetUrlParam(SortedDictionarydic) { StringBuilder sb = new StringBuilder(); foreach (KeyValuePairitem in dic.OrderBy(o => o.Key)) { sb.Append(item.Key + "=" + item.Value + "&"); } return sb.ToString();//最后一个带有& } public static string Sign(string prestr, string _input_charset) { StringBuilder sb = new StringBuilder(32); MD5 md5 = new MD5CryptoServiceProvider(); byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(prestr)); for (int i = 0; i < t.Length; i++) { sb.Append(t[i].ToString("x").PadLeft(2, '0')); } return sb.ToString(); } public static string BuildForm(SortedDictionarydicParam) { StringBuilder sbXML = new StringBuilder(); sbXML.Append(""); foreach (KeyValuePairtemp in dicParam) { sbXML.Append("<" + temp.Key + ">" + temp.Value + ""); } sbXML.Append(""); return sbXML.ToString(); } SortedDictionarystrDic = CreateWapAndAppPayParam(nonce_str, transaction_id); string str = WePayConfig.GetUrlParam(strDic); str += "key=" + key; string sign = WePayConfig.Sign(str, "utf-8").ToUpper(); strDic.Add("sign", sign); string postXML = WePayConfig.BuildForm(strDic);
public static string CreateXML(string key, params string[] strs)
{
string stringA = "";
StringBuilder sb = new StringBuilder("");
foreach (string item in strs)
{
stringA += item + "&";
sb.Append("<" + item.Split('=')[0].Trim() + ">");
sb.Append(item.Split('=')[1]);
sb.Append("");
}
stringA += "key=" + key;
//stringA.Replace("packageValue", "Sign=WXPay");
string sign = WePayConfig.Sign(stringA, "utf-8").ToUpper();
// System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(stringA, "MD5").ToUpper();
sb.Append("");
sb.Append(sign);
sb.Append("");
sb.Append("");
return sb.ToString();
}
微信APP支付 C#相关推荐
- JAVA微信APP支付接口整合
2019独角兽企业重金招聘Python工程师标准>>> 上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它 ...
- 第三方支付——微信app支付
微信App支付 前言 本篇文章将结合自己实际开发经验,从一下几个方面介绍微信app支付,什么是微信app支付?支付流程是什么样的? 前期需要准备些什么?结合官方文档和实际代码带大家走流程. 正文 微信 ...
- php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】
本文实例讲述了PHP实现的微信APP支付功能.分享给大家供大家参考,具体如下: 1.进行支付请求 他给的DEMO 用的时候有时候会报错 1)我遇到的情况 把 WxPay.Api.php这个文件的 p ...
- 微信APP支付的坑 - errorcode=-1
微信APP支付的坑 - errorcode=-1 关于微信App支付errorcode=-1的原因网上的大多数的说明和微信的官方文档差不多,不外乎app签名包名对应问题,这些原因都很好排除. 但最要命 ...
- 微信App支付全解析
简单介绍了微信移动支付的申请.接入.使用.确认支付结果等相关流程 0 系列文章 系列一 微信App支付全解析 系列二 支付宝App支付全解析 系列三 微信公众号支付全解析 系列四 微信扫码支付全解析 ...
- 微信app支付服务端开发记录
微信APP支付服务端 调用接口需要注意事项: 1.签名:需要全部参数参加签名,空值去掉.(实际传递了什么参数需要,就根据实际参数进行签名) 2.签名参数:appid是申请支付功能的app对于的ID,k ...
- 微信app支付功能-服务端的实现-python3版
微信app支付功能-服务端的实现-python3版 一:需求说明 二:微信app支付处理流程 三:所需依赖 3.1 支付配置 四:接口开发 4.1 创建订单接口 4.2 微信异步回调接口 4.3 订单 ...
- 微信APP支付之IJpay的使用
写在开始:一个搬砖程序员的随缘记录 微信支付相对其他支付,比如支付宝支付坑比较多.一直报签名失败.签名参数顺序.数据类型,加密类型这些都需要注意,用第三方的比较省心. IJpay介绍: 聚合支付,IJ ...
- java实现微信App支付
废话不多说,直接上代码,微信的小程序,公众号支付都大差不差,自行看文档修改参数即可. maven依赖: <dependency><groupId>com.github.wxpa ...
- 微信APP支付申请方法
2019独角兽企业重金招聘Python工程师标准>>> 目前,全国各大商场.超市.便利店.餐饮业.旅游业.医疗业等等都接入了微信支付,并开通微信公众号线上商城做起了线上推广和销售.微 ...
最新文章
- Python全栈工程师(Python3 所有基础内容 0-0)
- Linux内核 - tcp发送数据从应用到驱动经历的函数调用
- 前端趋势榜:上周最有意思、又实用的 10 大 Web 项目 - 210924
- TP查询数据库多维数组
- 使用Tenorshare iCareFone for mac如何对iPhone进行系统修复?
- Linux 内存管理:DAX(Direct Access)机制的作用及实现原理
- java学术论文_java毕业设计论文-学术参考网
- 抽奖随机滚动_年会抽奖该怎么玩?
- MYBATIS 文档
- Zookeeper数据同步流程
- 【时间序列】时间序列数据的缺失填补方法总结
- Java 定义一个 Employee类,定义方法输出Employee的名字,年龄,总收入。编写应用程序使用Employee
- 转:Mac操作技巧 | 键盘侠必备快捷键
- 微信小程序+SpringBoot+mybatis+MySQL实现简单的登录
- 一篇文章带你了解,App 测试工具
- 移动性能测试工具perfDog分享和wifi链接问题
- java 生成时间戳
- 苹果CMS V8 韩剧TV 一款特别精美漂亮的模板 包含PC端+WAP端
- loctionplace.reset_index(drop=True,inplace=True)
- Starling Juggler