微信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#相关推荐

  1. JAVA微信APP支付接口整合

    2019独角兽企业重金招聘Python工程师标准>>> 上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它 ...

  2. 第三方支付——微信app支付

    微信App支付 前言 本篇文章将结合自己实际开发经验,从一下几个方面介绍微信app支付,什么是微信app支付?支付流程是什么样的? 前期需要准备些什么?结合官方文档和实际代码带大家走流程. 正文 微信 ...

  3. php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】

    本文实例讲述了PHP实现的微信APP支付功能.分享给大家供大家参考,具体如下: 1.进行支付请求 他给的DEMO 用的时候有时候会报错 1)我遇到的情况 把  WxPay.Api.php这个文件的 p ...

  4. 微信APP支付的坑 - errorcode=-1

    微信APP支付的坑 - errorcode=-1 关于微信App支付errorcode=-1的原因网上的大多数的说明和微信的官方文档差不多,不外乎app签名包名对应问题,这些原因都很好排除. 但最要命 ...

  5. 微信App支付全解析

    简单介绍了微信移动支付的申请.接入.使用.确认支付结果等相关流程 0 系列文章 系列一 微信App支付全解析 系列二 支付宝App支付全解析 系列三 微信公众号支付全解析 系列四 微信扫码支付全解析 ...

  6. 微信app支付服务端开发记录

    微信APP支付服务端 调用接口需要注意事项: 1.签名:需要全部参数参加签名,空值去掉.(实际传递了什么参数需要,就根据实际参数进行签名) 2.签名参数:appid是申请支付功能的app对于的ID,k ...

  7. 微信app支付功能-服务端的实现-python3版

    微信app支付功能-服务端的实现-python3版 一:需求说明 二:微信app支付处理流程 三:所需依赖 3.1 支付配置 四:接口开发 4.1 创建订单接口 4.2 微信异步回调接口 4.3 订单 ...

  8. 微信APP支付之IJpay的使用

    写在开始:一个搬砖程序员的随缘记录 微信支付相对其他支付,比如支付宝支付坑比较多.一直报签名失败.签名参数顺序.数据类型,加密类型这些都需要注意,用第三方的比较省心. IJpay介绍: 聚合支付,IJ ...

  9. java实现微信App支付

    废话不多说,直接上代码,微信的小程序,公众号支付都大差不差,自行看文档修改参数即可. maven依赖: <dependency><groupId>com.github.wxpa ...

  10. 微信APP支付申请方法

    2019独角兽企业重金招聘Python工程师标准>>> 目前,全国各大商场.超市.便利店.餐饮业.旅游业.医疗业等等都接入了微信支付,并开通微信公众号线上商城做起了线上推广和销售.微 ...

最新文章

  1. Python全栈工程师(Python3 所有基础内容 0-0)
  2. Linux内核 - tcp发送数据从应用到驱动经历的函数调用
  3. 前端趋势榜:上周最有意思、又实用的 10 大 Web 项目 - 210924
  4. TP查询数据库多维数组
  5. 使用Tenorshare iCareFone for mac如何对iPhone进行系统修复?
  6. Linux 内存管理:DAX(Direct Access)机制的作用及实现原理
  7. java学术论文_java毕业设计论文-学术参考网
  8. 抽奖随机滚动_年会抽奖该怎么玩?
  9. MYBATIS 文档
  10. Zookeeper数据同步流程
  11. 【时间序列】时间序列数据的缺失填补方法总结
  12. Java 定义一个 Employee类,定义方法输出Employee的名字,年龄,总收入。编写应用程序使用Employee
  13. 转:Mac操作技巧 | 键盘侠必备快捷键
  14. 微信小程序+SpringBoot+mybatis+MySQL实现简单的登录
  15. 一篇文章带你了解,App 测试工具
  16. 移动性能测试工具perfDog分享和wifi链接问题
  17. java 生成时间戳
  18. 苹果CMS V8 韩剧TV 一款特别精美漂亮的模板 包含PC端+WAP端
  19. loctionplace.reset_index(drop=True,inplace=True)
  20. Starling Juggler

热门文章

  1. LCD1602字符串显示(STM32F103)
  2. NSIS中文用户手册下载(免费下载)
  3. 易语言API HOOK DeviceIOControl修改磁盘序列号
  4. java之final的各种用法
  5. phpwind升级php7,phpwind-8.7-GBK升级到phpwind-9.02-utf8步骤详解
  6. vs2005的MSDN的下载
  7. 如何连接到sqlplus
  8. 爬虫应对银行安全控件-实践
  9. 网站性能优化——雅虎14条
  10. 基于51单片机GPS的导航系统设计(3)---毕设论文