Android与iOS对接微信支付

与iOS内购不同,微信的支付系统把大部分重要的工作都放在了服务端,客户端只有少量工作

我相信,各位程序在看这篇文章的时,微信的appid应该已经注册,app支付功能应该已经开通了。


重点名词:

1.客户端 :app自己的客户单

2.服务器 :app自己的服务器

3.微信 : 三方的微信平台


实现流程

1.客户端向服务器请求所有支付需要的参数

android:

扫描二维码关注公众号,回复: 4905712 查看本文章

   IWXAPI api;

   PayReq request = new PayReq();

   request.appId = "wxd930ea5d5a258f4f";

   request.partnerId = "1900000109";

   request.prepayId= "1101000000140415649af9fc314aa427",;

   request.packageValue = "Sign=WXPay";

   request.nonceStr= "1101000000140429eb40476f8896f4c9";

   request.timeStamp= "1398746574";

   request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";

   api.sendReq(req);

iOS:

   PayReq *request = [[[PayReq alloc] init] autorelease];

   request.partnerId = @"10000100";

   request.prepayId= @"1101000000140415649af9fc314aa427";

   request.package = @"Sign=WXPay";

   request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";

   request.timeStamp= @"1397527777";

   request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";

   [WXApi sendReq:request];


appId:是在微信开发者后台注册app时分配的唯一标识,可以保存在客户端

partnerId:是商户号,在app申请支付功能通过后分配给商户的唯一标识

prepayId:这个是服务端向微信下单时,微信返回给服务器的订单号

packageValue:固定值(一定要填)

nonceStr:随机码

timeStamp:时间戳

sign:签名,签名是各个数据的顺序不能搞错,一定要按顺序来,不然无法调动支付

客户端向服务器请求订单的时候要告诉服务器支付金额,然后服务器找微信下单,服务器拿到prepayId后,再生产随机码和时间戳一起返回给客户端


2.服务端处理

虽然appId  partnerId  packageValue都可以放在客户端,但是为了设计上更简洁更安全,最好所有参数都由服务器下发


3.坑:

   支付返回-1:微信支付返回接口比较简单,只有成功、失败、取消。无论是什么原因失败,都返回-1,无法启动支付也返回-1

   这个时候就要逐步检查了

    1.appid是否正确

    2.app签名(不是订单签名)是否正确

    3.订单参数是不是每个都正确且有效

   通常这几个是主要问题,如果确认无误,就应该是服务端返回参数的问题了

    1.返回的商户号是否正确

    2.订单签名是否正确,订单签名一定要按顺序,而且各个参数的名字都要准确,一个字母都不能差

4.回调

android:

publicvoidonResp(BaseRespresp){
     if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){

      if(resp.errCode == 0)
      if(resp.errCode == -1)

      if(resp.errCode == -2)       

     }

}


ios:

 -(void)onResp:(BaseResp*)resp{
			  if ([respis KindOfClass:[PayResp class]]){
			      PayResp * response=(PayResp*)resp;
			      switch(response.errCode){
			          case WXSuccess:
                      			//服务器端查询支付通知或查询API返回的结果再提示成功
                      			NSlog(@"支付成功");
                      	break;
                      	default:
                      	NSlog(@"支付失败,retcode=%d",resp.errCode);
                      	break;
                  }
                  	}
                } 
如果已经集成了微信登录功,再集成微信支付,估计一天就够搞定了

猜你喜欢

转载自blog.csdn.net/u014261855/article/details/75890178