Implementing a payment transaction

To implement a payment transaction, do the following:
  1. Define the payment transaction in paymentOp.xml.
    <paymentOp.xml>
      <operation context="paymentCtx" id="paymentOp" implClass="com.ibm.btt.poc.operation.PaymentOperation">
        <refFormat name="csReplyFormat" refId="paymentSecondRecFmt" />
      </operation>
    </paymentOp.xml>
  2. Define the payment context in dsectxt.xml.
    <context id="paymentCtx" type="oper">
      <refKColl refId="paymentData"/>
    </context>
  3. Define the payment data element in dsedata.xml.
    <kColl id="paymentData">
      <data id="acctFrom" refType="String">
        <param id="isMandatory" value="true" />
      </data>
      <data id="acctTo" refType="String">
        <param id="isMandatory" value="true" />
      </data>
      <data id="amount" refType="Amount">
        <param id="isMandatory" value="true" />
      </data>
      <data id="acctFromBalance" refType="Amount" />
      <data id="acctToBalance" refType="Amount" />
      <data id="pageName" refType="String"></data>
      <field id="TrxReplyCode" />
    </kColl>
  4. Define the payment data format in dsefmts.xml.
    • Format definition used for payment transaction in Web 2.0 channel:
      <fmtDef id="paymentXMLFmt">
      		<fXML dataName="paymentData">
      			<fString dataName="acctFrom" />
      			<fString dataName="acctTo" />
      			<fString dataName="amount" />
      			<fString dataName="acctFromBalance" />
      			<fString dataName="acctToBalance" />
      		</fXML>
      	</fmtDef>
      	<fmtDef id="paymentFirstRecFmt">
      		<record>
        </record>
      	</fmtDef>
    • Format definition used for payment transaction in HTML channel, JSF channel, Rich Client:
      <fmtDef id="paymentSecondRecFmt">
      		<record>
      			<fString dataName="TrxReplyCode" />
      			<delim delimChar="#" />
      		</record>
      	</fmtDef>
      <fmtDef id="paymentSecondReqFmt">
      		<record>
      			<constant value="Tx06" />
      			<delim delimChar="#" />
      			<fString dataName="acctFrom" />
      			<delim delimChar="#" />
      			<fString dataName="acctTo" />
      			<delim delimChar="#" />
      			<fString dataName="amount" />
      			<delim delimChar="#" />
      		</record>
      	</fmtDef>
  5. Define the Web Service invoker for payment transaction in invoker.xml.
    <WSDII id="paymentWS" wsdlURL="http://localhost:9080/BackendEmulatorWeb/wsdl/Payment.wsdl"
        operation="PaymentOperation">
      <parameters>
        <wsDIIparameter id="cardReq"  />
      </parameters>
    </WSDII>
  6. Implement the execute() method of payment transaction in <toolkit_root>/samples/BTTMultiChannleSample/SampleBusiness/com.ibm.btt.poc.operation.PaymentOperation.java:
    String useWebService = "false";
    WSDynamicInvoker wsinvoker = null;
    useWebService = mark.getString("useWebService");
    if(useWebService.equals("true")){
        wsinvoker = (WSDynamicInvoker) InvokerFactory.getDefaultInvokerFactory().createInvoker("paymentWS");
      //Call a web service
        WebServiceInfo wsinfo= wsinvoker.getWsInfo();
        UserDefineTypeInfo paymentReqType = wsinfo.getUserDefineTypeByName("PaymentReqType");
        UserDefineTypeInfo paymentResponseType = wsinfo.getUserDefineTypeByName("PaymentResponseType");
        GenericDataObject cardReq = wsinvoker.convertContexDataToGenericDataObject(wsinvoker.getParameters().get("cardReq") , paymentReqType, this.getContext());
        Object result =  wsinvoker.execute(new Object[]{ cardReq  });
        if ( result instanceof GenericDataObject)
            wsinvoker.convertGenericDataObjectToContext( wsinvoker.getParameters().get("cardReq") , paymentResponseType, (GenericDataObject) result, this.getContext());
      
      // Set the page to display for HTML channel
    }
        setValueAt(HtmlConstants.REPLYPAGE, "paymentcomplete.jsp");
        setValueAt("errorCode", HtmlException.OK);
        setValueAt("TrxReplyCode","OK");
        setValueAt("outcome","succcess");
    			
    Note: The block of code demonstrates how to use BTT Web Service invoker to call a Web Service application.