您的位置:首页 > 移动开发

微信app支付android客户端以及.net服务端实现

2017-04-25 17:32 561 查看
由于公司运营需要,需要在客户端(android/ios)增加微信以及支付宝支付,在调用微信app支付时遇到一些问题,也算是一些踩过的坑,记录下来

,希望能对.net开发者服务端网站更快的集成微信app支付。

1.开发所需资料:微信开放平台应用的appid以及appsecert,商户平台的商户号以及api安全里面里面设置的key,详见 微信支付账户相关信息;

2.微信开发者平台完善应用平台的相关信息,android应用签名必须用打包签名过的发布版本apk(这一步很重用),包名必须一致,可以用微信提供的签名工具获得,签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk

以下是交互时序图,统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在商户服务器端完成(来源微信支付开发文档):

[AllowAnonymous]
public ActionResult PayResult()
{
ResponseHandler resHandler = new ResponseHandler(null);
string return_code = resHandler.GetParameter("return_code");
string return_msg = resHandler.GetParameter("return_msg");
string res = null;
EngineContext.Current.Resolve<ILogger>().Information("收到微信支付通知"+resHandler.ParseXML());
//EngineContext.Current.Resolve<ILoggingService>().Write(LogType.Pay, resHandler.ParseXML());
string orderno = resHandler.GetParameter("out_trade_no");
string payno = resHandler.GetParameter("transaction_id");
string nonce_str = resHandler.GetParameter("nonce_str");
var order = _wechatService.GetWechatPayResult(orderno);
if (order != null)
{
var first = order.FirstOrDefault(r => r.nonce_str == nonce_str);
if (first != null)
{
var payProvider = _wechatService.GetWechatPayProvider(first.appid);
resHandler.SetKey(payProvider.MchKey);
if (resHandler.IsTenpaySign())
{
if (return_code == TenPayTypeResult.SUCCESS.ToString())
{
int totaled= int.Parse(resHandler.GetParameter("total_fee"));
if (totaled == first.total_fee)
{
first.IsSuccess = true;
first.time_end = DateTime.Now;
first.total_fee_ed = int.Parse(resHandler.GetParameter("total_fee"));
first.transaction_id = payno;
first.Content = resHandler.ParseXML();
_wechatService.UpdateWechatPayResult(first);
EngineContext.Current.Resolve<IEventPublisher>().Publish(resultEvent);
}else
{
EngineContext.Current.Resolve<ILogger>().Information("微信支付金额与订单金额不匹配" + resHandler.ParseXML());
}

}
}
}

//验证请求是否从微信发过来(安全)
string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
return Content(xml, "text/xml");
}


微信回调通知参考代码
微信支付官方文档

微信.NET集成可参考现有轮子 JeffreySu/WeiXinMPSDK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐