微信支付

目录

微信支付组件流程说明.............................................................................................. 3

微信支付组件接入注意事项....................................................................................... 7

微信组件支付问题说明.............................................................................................. 7




更新日志

发布日期版本修订人更新内容

2017.01.201.0.0李伟初稿完成

2017.01.201.0.0李伟1.新增微信组件接入流程说明


   2017.01.221.0.0李伟1.完善微信支付组件说明文档

2017.10.10  1.0.0李伟 1.增加微信支付回调 




微信支付组件流程说明

微信支付接入文档网址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5


(1)、后台配置

商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面,如图8.8红框内所示。


应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值

应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串

 

(2)、注册APPID

商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID 代码如下:

/**  * 1.注册APPID  */ private void registerAppid(){  

   msgApi = WXAPIFactory.createWXAPI(this, null);//商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID

   msgApi.registerApp(Constants.APP_ID);// 将该app注册到微信

}


(3)调起支付界面


商户服务器生成支付订单,生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付 代码如下:


/**  * 2.调起微信支付界面  */ private void genPayReq() {

      LogUtils.i(TAG, "pay order = " + order);

      PayReq req = new PayReq();

      req.appId = Constants.APP_ID;//微信开放平台审核通过的应用APPID

      req.partnerId = Constants.MCH_ID;//微信支付分配的商户号

      req.prepayId = order;//微信返回的支付交易会话ID

      req.packageValue = "Sign=WXPay";//暂填写固定值Sign=WXPay

      req.nonceStr = genNonceStr();//随机字符串,不长于32位。推荐随机数生成算法

      req.timeStamp = String.valueOf(genTimeStamp());//时间戳

      List signParams = new LinkedList();

      signParams.add(new BasicNameValuePair("appid", req.appId));

      signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));

      signParams.add(new BasicNameValuePair("package", req.packageValue));

      signParams.add(new BasicNameValuePair("partnerid", req.partnerId));

      signParams.add(new BasicNameValuePair("prepayid", req.prepayId));

      signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));

      req.sign = genAppSign(signParams);//签名

      msgApi.registerApp(Constants.APP_ID);

      msgApi.sendReq(req);

      finish();

   }



(4)支付结果回调

支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。

代码如下: 

@Override

public void onResp(BaseResp resp) {  

LogUtils.d(TAG, "onPayFinish, errCode = " + resp.errCode); 

String errCode = String.valueOf(resp.errCode);  

switch (errCode) { 

case Constants.PAY_SUCCESS: 

sendBroadcast(new Intent("com.wx.broadcast.paysuccess")); 

Toast.makeText(this, getResources().getString(R.string.pay_success), Toast.LENGTH_SHORT).show(); finish(); 

break; 

case Constants.PAY_CANCEL: 

sendBroadcast(new Intent("com.wx.broadcast.cancel")); 

Toast.makeText(this, getResources().getString(R.string.pay_cancel), Toast.LENGTH_SHORT).show(); finish(); 

break; 

case Constants.PAY_FAIL: 

sendBroadcast(new Intent("com.wx.broadcast.payfail")); 

Toast.makeText(this, getResources().getString(R.string.pay_fail), Toast.LENGTH_SHORT).show(); finish(); 

break;  

default: 

break; 

}  

}

 (5)接入微信支付的项目manifest配置说明

 

 

 

 

 



  (6)增加广播

 


public class WXPayBroadcastReciver extends BroadcastReceiver {

    EventBus eventBus = EventBus.getDefault();


 public WXPayBroadcastReciver() {}




    @Override

 public void onReceive(Context context, Intent intent) {


        if (intent.getAction().equals("com.wx.broadcast.cancel")) {

            Log.d("wx", " wx pay cancel");

 eventBus.post(new BJMGFSdkEvent(BJMGFSdkEvent.RECHARGE_CANCEL));


 } else if (intent.getAction().equals("com.wx.broadcast.paysuccess")) {

            eventBus.post(new BJMGFSdkEvent(BJMGFSdkEvent.RECHARGE_SUCCESS));

 Log.d("wx", " wx pay success");

 } else if (intent.getAction().equals("com.wx.broadcast.payfail")) {

            eventBus.post(new BJMGFSdkEvent(BJMGFSdkEvent.RECHARGE_FAIL));

 Log.d("wx", " wx pay fail");

 }


    }

}

 



附:微信支付回调结果码说明

 

结果码描述解决方案

0成功展示成功界面

-1错误可能原因:签名错误,未注册APPID,项目设置APPID不正确等

-2用户取消无需处理,用户支付不了,取消支付。

 

(5)签名打包

AS中中签名过程如下:Build=>Generate Signed APK界面

如下图:

打包成功后将apk放入到E:\GAME_M_Engine_Proxy\sdkres\android\hwy_android\assets目录下,注意apk名称必须为Wxpay.apk


微信支付组件接入注意事项

(1)APP打包时签名文件keystore与APP包名必须与微信后台配置的包名和签名文件一致。签名文件目录:E:\cocos2d_3\SDKModulesRepo\android\sources\WechatPayPlugin

微信组件支付问题说明

1.调不起支付界面,显示签名错误?


检查支付组件打包时的签名文件是否正确。

你可能感兴趣的:(微信支付)