Android 제3자 위 챗 결제 강좌

위 챗 결 제 를 했 고 Demo 를 다운 받 았 습 니 다.그 전에 바 뀌 었 던 것 을 발 견 했 습 니 다.v 3.0 버 전 은 아직도 모색 하고 있 을 지도 모 릅 니 다.여기 서 저 는 지불 에 성 공 했 습 니 다.더 이상 말 하지 않 고 바로 주제 에 들 어 갑 니 다.
1.먼저 위 챗 개발 플랫폼 에 계 정 을 등록 하고 앱 을 새로 추가 하 며 정확 한 가방 이름 을 작성 해 야 합 니 다.정확 한 서명(MD5 에 있 는 일련의 문자 사칭 제거,모든 소문 자)은 물론 생 성 된 AppID 와 AppSecret 도 모두 유용 합 니 다!마지막 으로 300 대양 을 써 서 지불 기능 을 개통 해 야 합 니 다!
2.위 챗 결제 절차 분석

3.인터페이스 인 터 랙 션 프로 세 스
这里写图片描述
위 에서 다 보 았 으 니,다음은 코드 를 쓰 는 것 이다.
4.여 기 는 wxapi 라 는 가방 이름 이 있어 야 하고 WXPayEntry Activity 라 는 이름 이 있어 야 합 니 다.
这里写图片描述
5.AndroidManifest.xml 에 관련 정 보 를 설정 합 니 다.

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 <!--       -->
    <activity
      android:name=".ui.activity.MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:scheme="wx487898a262d23df3" />
      </intent-filter>
    </activity>


    <activity
      android:name=".wxapi.WXPayEntryActivity"
      android:exported="true"
      android:label="@string/title_activity_wxpayentry"
      android:launchMode="singleTop" />

    <receiver
      android:name=".wxpay.AppRegister"
      android:permission="com.tencent.mm.plugin.permission.SEND" >
      <intent-filter>
        <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
      </intent-filter>
    </receiver>

  /**
   *       ,                 
   *   :  fee,  id,  title 
   *                  , :
   * appid,noncestr,package,partnerid,prepayid,
   * timestamp,sign
   *     
   */
  StringBuffer sb = new StringBuffer();
  WeixinPay wpay;
  private AlertDialog mDialog;
  private AlertDialog.Builder builder;

  public void weixinPay() {
    //   WXAPIFactory  ,  IWXAPI   
    api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
    //   app     
    api.registerApp(Constants.APP_ID);
    //     
    Params p = new Params();
    p.put("fee",fee);
    p.put("spbill_create_ip", NetWorkUtils.getLocalIpAddress(this));
    String value = "     " + title;
    try {
      String title = new String(value.getBytes("UTF-8"));
      p.put("body", title);
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }

    p.put("userId", O.getUser().getId());

    p.post(C.URL.WEIXIN_PAY, new ReHandler() {

      @Override
      public void onSuccess(NetEntity entity) {

        wpay = entity.toObj(WeixinPay.class);

        PayReq req = new PayReq();
        req.appId = wpay.getAppid();//   appId
        req.packageValue = wpay.getPackageValue();//  
        req.extData = "app data"; // optional
        req.timeStamp = wpay.getTimeStamp();//    
        req.partnerId = wpay.getPartnerId();//    "
        req.prepayId = wpay.getPrepayId();//       
        req.nonceStr = wpay.getNonceStr();//      
        req.sign = wpay.getSign();//        

        //       
        List<NameValuePair> signParams = new LinkedList<NameValuePair>();
        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);

        //      
        if(api.isWXAppInstalled()&&api.isWXAppSupportAPI()){
          api.sendReq(req);
        }else{
          builder = new AlertDialog.Builder(WXPayEntryActivity.this);
          builder.setNeutralButton("  ",
              new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                  mDialog.dismiss();
                }
              }).setTitle("    ").setMessage("        ");

          mDialog = builder.create();
          mDialog.show();
        }

      }

      @Override
      public void onStart() {

      }

      @Override
      public void onFailure(String message) {
      }
    });
  }

  private String genAppSign(List<NameValuePair> params) {
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < params.size(); i++) {
      sb.append(params.get(i).getName());
      sb.append('=');
      sb.append(params.get(i).getValue());
      sb.append('&');
    }
    sb.append("key=");
    sb.append(Constants.API_KEY);

    this.sb.append("sign str
" + sb.toString() + "

"); String appSign = MD5.getMessageDigest(sb.toString().getBytes()); Log.e("orion", appSign); return appSign; }
6.WXPayEntry Activity 류 에서 성공 한 후 리 셋 방법 onResp()

@Override
  public void onResp(BaseResp resp) {
    Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

    if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
      if(resp.errCode==-2){
        Toast.makeText(this,"    !", Toast.LENGTH_LONG).show();
      }
      if(resp.errCode==-1){
        Toast.makeText(this,"    !", Toast.LENGTH_LONG).show();
      }
      if(resp.errCode==0){
        queryOrder();//                 
      }

    }

마지막 으로 다 한 후에 반드시 서명 하고 포장 해 야 합 니 다.이것 은 위 챗 의 독점 비법 입 니 다.잊 어 버 리 면 튀 어 나 옵 니 다.-1,하하.
마지막 으로 결제 반환-1 의 상황 을 정리 하 겠 습 니 다.
1.위 챗 백 엔 드 서명,가방 이름 확인
2.프로젝트 서명 여부
3.이전에 테스트 를 한 적 이 있 으 면-1 의 경우 위 챗 의 데 이 터 를 지우 고 위 챗 에 다시 로그 인해 야 합 니 다.
4.백 스테이지 서버 가 요구 에 따라 첫 번 째 서명,두 번 째 서명 을 하 는 지,두 번 째 서명 이 틀 리 면 저 희 는 다시 한 번 서명 하 겠 습 니 다.제 코드 에 적 혀 있 습 니 다.
이상 은 위 챗 결제 의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기