微信支付 notify 回调怎么重写回调 notifyprocess

据上次&&后很多园友在被虐了千百遍后终于跳转到了亲切的微信支付界面,但输入密码支付后却不知道怎么处理了,接下来补上支付后的处理流程。
1. html中根据前台支付后反馈信息成功与否跳转到相关页面
if (res.err_msg == "get_brand_wcpay_request:ok") {
// message: "微信支付成功!",
window.location.replace("@Url.Content("~/WxPay/Success?ordercode=@(Model.order_no)"));
}else if (res.err_msg == "get_brand_wcpay_request:cancel") {
// message: "已取消微信支付!"
2.&&中下载&微信支付接口文档及demo(公众账号).zip
返回的参数参考接口文档中 &4.2.通用通知接口& 一节。
通知 URL是 4.1 节中提交的参数 notify_url ,支付完成后,微信 会把相关和用户信息发送到该URL,商户需要接收处理信息。
//支付回调页面
public ActionResult notice_url()
string resultFromWx = getPostStr();
//设置支付参数
RequestHandler paySignReqHandler = new RequestHandler(null);
WriteLog(" 微支付notice resultFromWx=" + resultFromWx);
var res = XDocument.Parse(resultFromWx);
//通信成功
if (res.Element("xml").Element("return_code").Value == "SUCCESS")
if (res.Element("xml").Element("result_code").Value == "SUCCESS")
//交易成功
paySignReqHandler.SetParameter("return_code", "SUCCESS");
paySignReqHandler.SetParameter("return_msg", "OK");
string ordecode = res.Element("xml").Element("out_trade_no").V
BLL.orders Bll = new BLL.orders();
if (Bll.Update(ordecode ))
WriteLog(" 微支付交易成功=" + ordecode);
WriteLog(" 微支付交易失败=" + ordecode);
catch (Exception ex)
WriteLog(ex," 微支付交易异常=" + ordecode);
paySignReqHandler.SetParameter("return_code", "FAIL");
paySignReqHandler.SetParameter("return_msg", "交易失败");
paySignReqHandler.SetParameter("return_code", "FAIL");
paySignReqHandler.SetParameter("return_msg", "签名失败");
string data = paySignReqHandler.ParseXML();
var result = TenPayV3.Unifiedorder(data);
WriteLog(" 微支付notice result=" + result);
return View();
注意:因此接收到成功支付后需要返回代码中红色的部分来提醒微信服务器已处理,否则会不断收到微信服务器的反馈。getPostStr()方法:
//获得Post过来的数据
public string getPostStr()
Int32 intLen = Convert.ToInt32(Request.InputStream.Length);
byte[] b = new byte[intLen];
Request.InputStream.Read(b, 0, intLen);
return System.Text.Encoding.UTF8.GetString(b);
&现在前后台都打通了,主要还是要耐心调试,祝君好运~
  鉴于没时间看邮件急于想要的可自行扫右上角的二维码进入微信公众号【一个码农的日常】,回复&net支付&或&java支付&&或&php支付
& &或加入 &新建2号QQ群: & (1号群:& 已满)在文件里面有源码地址(等群主有时间会通过)。
  &其它干货下载资源已放入微信公众号【一个码农的日常】
阅读(...) 评论()2285人阅读
opensns二次开发(10)
工作日志(9)
支付api(1)
大家好,嘛上完整理发完了jsapi整合后开始研究支付成功后的回调方法。也是遇到了很多问题,最终得到结果是支付成功后能够回调notify方法进行逻辑处理,但是没有办法写入日志(提示是文件不可写,修改了服务器上文件夹权限777试过还是不行,暂时没想到解决办法),嘛,不过操作数据库,修改订单状态什么的都OK啦。好,下面上干货。
接着之前的工作,我们在PayController.class.php控制器里写入notify方法。
首先我们需要测试支付成功后有没有调用我们的notify方法,这里我选择在数据库中临时建一张test表,里面只有2个字段id和order_id,order_id是准备用来记录返回值中的transaction_id的。
在notify方法中编写如下代码:
$db = M('order_test');
$in['order_id'] = time(); $db-&add($in);
在地址栏里打入notify方法的url访问,在数据库中就得test表中就可以看到有一条新数据插入。
ok,现在我们来支付1分钱测试看看数据库里是否有新数据插入。嘛结果并没有数据插入。
研究官方文档指导了jsapi &回调地址notify_url & 是不允许带参数的。这怎么办呢?opensns默认的兼容模式访问地址,控制器和方法名是以参数形式拼接在url后面的。
看来要开启伪静态了。
开启伪静态的方法在opensns官方文档的建站教程中有,这里我们就说下自定义我们的notify方法的伪静态地址:(我的是apache环境下伪静态URLRewrite规则)
打开.htaccess文件找个位置加入以下代码:
RewriteRule ^/?pay/notify$
index.php?s=/mob/pay/notify [L]到后台系统里面开启网站伪静态。
在地址栏里输入 && 网站根目录/pay/notify &&发现数据库test表中新增了一条数据。说明伪静态开启成功。
现在我们把jsapi方法中交易通知url重新设置成我们的伪静态地址:
$input-&SetNotify_url(&http://网站根目录/pay/notify&); //交易通知url然后再支付1分钱。 &发现数据库test表中新增了一条数据。说明微信支付调用了我们的notify方法。
ok家下来就是在notify方法中写入具体的逻辑处理了。先给出代码:
public function notify(){
vendor('wxpay.lib.WxPayNotify');
//引入通知类库
vendor('wxpay.lib.log');
//引入日志
$notify = new \WxPayNotify();
$notify-&Handle(false);
//最后为WxPayApi类下replyNotify方法
$xml = $GLOBALS['HTTP_RAW_POST_DATA']; //微信的回调数据
$base = new \WxPayResults();
//实例化数据对象结果类
$data = $base-&FromXml($xml);
//将xml转为array
if($base-&CheckSign() == true){
if ($data[&return_code&] == &FAIL&) {
//此处应该更新一下订单状态,商户自行增删操作
}elseif($data[&result_code&] == &FAIL&){
//此处应该更新一下订单状态,商户自行增删操作
//此处应该更新一下订单状态,商户自行增删操作
$db = M('order_test');
$in['order_id'] = $data['transaction_id'];
$db-&add($in);
}这里并没有什么特别需要注意的地方,代码写好后我们再支付1分钱看看。按我们的逻辑支付后只有在验证签名成功,返回状态码成功,返回业务结果成功后,才会往数据库中写入微信订单号。嘛实际结果如图:
之后要编写怎样的逻辑处理就大家自己决定吧。
同样有什么问题欢迎添加企鹅交流讨论哦。
那么下次再会啦。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9159次
排名:千里之外
原创:16篇
(1)(1)(1)(7)(7)Pages: 1/2
主题 : iOS开发支付宝支付成功以后的回调问题
级别: 侠客
UID: 483349
可可豆: 187 CB
威望: 181 点
在线时间: 259(时)
发自: Web Page
来源于&&分类
iOS开发支付宝支付成功以后的回调问题&&&
如果手机中安装了支付宝,会走AppDelegate中的方法,但是我里面的log始终不打印,是不是和回调的notifyURL有关系呢- (BOOL)application:(UIApplication *)application&&&&&&&&&&&&openURL:(NSURL *)url&&sourceApplication:(NSString *)sourceApplication&&&&&&&& annotation:(id)annotation {&&&&[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {&&&&&&&&&&&&NSLog(@&result = %@&,resultDic);&&&&&&&&/*这里面不走*/&&&&}];&&&&return YES;}上面的这个方法走过之后,调用支付宝时的回调方法也会走,这个是问什么呢[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {&&&&&&&&&&&&NSLog(@&reslut = %@&,resultDic);&&&&&&&&}];
级别: 新手上路
UID: 235175
可可豆: 123 CB
威望: 72 点
在线时间: 307(时)
发自: Web Page
这个参数你设置对了吗?
这里的schemeStr=@&AutomobileMarket&,当然这个值你可以随意设置!这是回调你APP的唯一标识!
级别: 侠客
UID: 483349
可可豆: 187 CB
威望: 181 点
在线时间: 259(时)
发自: Web Page
回 1楼(bingxue314159) 的帖子
这个值肯定是写了,但是我的APPdelegate中的方法走了,就是block里面没有走- (BOOL)application:(UIApplication *)application&&openURL:(NSURL *)url&&sourceApplication:(NSString *)sourceApplication&&&&&&&& annotation:(id)annotation {&&&&NSLog(@&走了没&);&&&&[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {&&&&&&&&&&&&NSLog(@&result = %@&,resultDic);&&&&&&&&/*走这里面*/&&&&}];&&&&return YES;}这是为什么呢
级别: 新手上路
可可豆: 15 CB
威望: 15 点
在线时间: 186(时)
发自: Web Page
再看看文档或支付宝提供的demo,你看看demo换上你的签名等能否正常回调
级别: 侠客
UID: 483349
可可豆: 187 CB
威望: 181 点
在线时间: 259(时)
发自: Web Page
回 3楼(swallow) 的帖子
还是一样的,appdelegate中的log没有打印,难道真的和notifyURL有关系吗
级别: 新手上路
可可豆: 15 CB
威望: 15 点
在线时间: 186(时)
发自: Web Page
&& [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {&&&&&&&&&&&&NSLog(@&result = %@&,resultDic);&&&&}];只有在程序kill掉的时候&&回调才会响应吧,因为它会先走 payOrder那个block,二个都走那不重复啦
级别: 侠客
UID: 126544
可可豆: 377 CB
威望: 374 点
在线时间: 597(时)
发自: Web Page
回 4楼(First521DSK) 的帖子
和notifyURL 没有关系,这个你随便写一个都行。
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {&&&&&&&&&&&&NSLog(@&reslut = %@&,resultDic); &&&&}]; && 用这个试试。 && &&&& 这个是方面描述。 &&&&/** *&&支付接口 * *&&@param orderStr&&&&&& 订单信息 *&&@param schemeStr&&&&&&调用支付的app注册在info.plist中的scheme *&&@param compltionBlock 支付结果回调Block */- (void)payOrder:(NSString *)orderStr&&&&&&fromScheme:(NSString *)schemeStr&&&&&&&&callback:(CompletionBlock)completionB/** *&&处理钱包或者独立快捷app支付跳回商户app携带的支付结果Url * *&&@param resultUrl 支付结果url,传入后由SDK解析,统一在上面的pay方法的callback中回调 *&&@param completionBlock 跳钱包支付结果回调,保证跳转钱包支付过程中,即使调用方app被系统kill时,能通过这个回调取到支付结果。 */- (void)processOrderWithPaymentResult:(NSURL *)resultUrl&&&&&&&&&&&&&&&&&&&&&&standbyCallback:(CompletionBlock)completionB
级别: 侠客
UID: 126544
可可豆: 377 CB
威望: 374 点
在线时间: 597(时)
发自: Web Page
回 6楼(xyz_886) 的帖子
支付结果&&&&&&&&&&&&&&if ([[resultDic objectForKey:@&resultStatus&] integerValue] == 9000) &&&&&&&&&& 9000 是成功&&其余都是失败 &&&&&&&&&&&&具体错误码 看文档吧。&&
级别: 侠客
UID: 483349
可可豆: 187 CB
威望: 181 点
在线时间: 259(时)
发自: Web Page
回 6楼(xyz_886) 的帖子
这个方法我是在调用支付宝的时候写的,感觉无论安装与不安装支付宝,支付完成后都会走这个方法拿到支付结果[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {&&&&&&&&&&&&NSLog(@&reslut = %@&,resultDic);&&}]; 但是当支付宝安装的时候,他还会进入在appdelegate中调用这个方法,只不过里面的结果拿不到,- (void)processOrderWithPaymentResult:(NSURL *)resultUrl&&&&&&&&&&&&&&&&&&&&&&standbyCallback:(CompletionBlock)completionB按照你的意思是,不用考录手机上面是否有安装支付宝吗,只从第一个方法中拿到结果就行了?
级别: 侠客
UID: 483349
可可豆: 187 CB
威望: 181 点
在线时间: 259(时)
发自: Web Page
回 5楼(swallow) 的帖子
就是这点我也觉得很奇怪,应为目前在appdelegate中拿不到支付结果,我问支付宝的技术人员,他们说合notifyURL有关,但是如果两个都走了,就有重复了,现在还没有解决呢!
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版2002年12月 PowerBuilder大版内专家分月排行榜第二
2003年3月 PowerBuilder大版内专家分月排行榜第三
2014年11月 PHP大版内专家分月排行榜第三2014年6月 PHP大版内专家分月排行榜第三2014年4月 PHP大版内专家分月排行榜第三2014年2月 PHP大版内专家分月排行榜第三2013年11月 PHP大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 微信支付 notify 的文章

 

随机推荐